0

我认为这更像是一个文体问题,但我有一个带有统计分布类型枚举的类(仅在该类中使用):

Entity {
public:
  enum DistributionType {NORM, UNIFORM_INT, UNIFORM_SPECIFIED, BINOMIAL };
  distributionType ds;
...
}

我想将 DistributionType 值作为构造函数的参数:

Entity salesVolume = new Entity(Entity::DistributionType.NORM);

但这不起作用(我猜它在传递一个 int 值时需要 DistributionType ?)

使用属于同一类的枚举值调用构造函数的正确方法是什么?我可以通过类型转换为 int 来做到这一点,但这似乎不是很紧。我也可以从类中排除枚举并单独定义它(我已经看到了)——这是一种更常见的方法吗?

多谢你们

4

3 回答 3

1

使用枚举,没有“命名空间”,所以你需要这个:

Entity* salesVolume = new Entity(Entity::NORM);

C++11 提供了“枚举类”或“强类型枚举”来解决这种奇怪的问题。它还允许您将枚举名称用作传统枚举的“范围”,因此您也可以这样做:

Entity* salesVolume = new Entity(Entity::DistributionType::NORM); // C++11 only
于 2012-05-16T06:00:54.947 回答
1

您可以将其称为Entity::NORM或者,更明确地(在 C++11 中)Entity::DistributionType::Norm,.

但是,从风格上看,这不是 Java。您展示的代码将比仅使用 C++ 中的自然编码方式、使用自动变量(“在堆栈上”创建的变量)更慢并且可能泄漏内存。您的代码也不会编译,因为new为您提供了指向该对象的指针。然而,而不是

Entity * salesVolume = new Entity(Entity::NORM);

更喜欢

Entity salesVolume(Entity::NORM);
于 2012-05-16T06:21:13.987 回答
0

你能请你得到什么错误,因为这段代码应该可以工作,唯一的问题是:

  1. 您已将 ds 定义为 distributionType ,而它应该是 DistributionType (大写“D”)。
  2. 实体 salesVolume = new Entity(Entity::DistributionType.NORM); 应该替换为

实体 *salesVolume = new Entity(Entity::Entity.NORM);

请注意 sa;esVolume 之前的“*”。即你必须将它声明为指针。

于 2012-05-16T06:19:24.483 回答