我认为这更像是一个风格问题,但我有一个带有统计分布类型枚举的类(仅在此类中使用):
Entity {
public:
enum DistributionType {NORM, UNIFORM_INT, UNIFORM_SPECIFIED, BINOMIAL };
distributionType ds;
...
}
我想将DistributionType值作为构造函数的参数:
Entity salesVolume = new Entity(Entity::DistributionType.NORM);
但是这不起作用(我猜它在传递int值时会期望DistributionType吗?)
调用构造函数的正确方法是什么?枚举值是同一个类的一部分?我可以通过类型转换为int来实现,但这似乎不是很紧。我也可以从类中排除枚举并单独定义它(我已经看过) - 这是一种更常见的方法吗?
谢谢你们
答案 0 :(得分:1)
使用枚举,没有“命名空间”,所以你需要这个:
Entity* salesVolume = new Entity(Entity::NORM);
C ++ 11提供“枚举类”或"strongly typed enums"来解决这种奇怪现象。它还允许您将枚举名称用作传统枚举的“范围”,因此您也可以这样做:
Entity* salesVolume = new Entity(Entity::DistributionType::NORM); // C++11 only
答案 1 :(得分:1)
您可以将其称为Entity::NORM
,或更明确地(在C ++ 11中),Entity::DistributionType::Norm
。
然而,在风格上,这不是Java。您使用自动变量(在堆栈上创建的变量),您展示的代码将比使用C ++中的自然编码方式更慢并且可能泄漏内存。您的代码也将无法编译,因为new
为您提供了指向该对象的指针。但是,而不是
Entity * salesVolume = new Entity(Entity::NORM);
体型
Entity salesVolume(Entity::NORM);
答案 2 :(得分:0)
你能不能得到什么错误,因为这段代码应该有用,只有问题是:
Entity * salesVolume = new Entity(Entity :: Entity.NORM);
请注意sa之前的“*”; esvolume。即你必须将它声明为指针。