我试图模仿Java的枚举在C++,所以我创建的代码看起来像这样的(当然我删除任何东西,这不是我的相关问题):C++如何定义静态成员,哪个类有私有构造函数?
MyEnum.hpp
MyEnum
{
public:
class Value1;
class Value2;
static Value1 VALUE1;
static Value2 VALUE2;
private:
MyEnum(std::string name);
};
class MyEnum::Value1 public MyEnum
{
private:
Value1();
};
class MyEnum::Value2: public MyEnum
{
private:
Value2();
};
我使得构造函数是私有的,这样枚举值的唯一实例就是BaseEnum的静态成员。如何定义它们?
MyEnum.cpp
MyEnum::Value1 VALUE1=MyEnum::Value1();
这给了我
error: calling a private constructor of class 'MyEnum::Value1'
编辑: 这是太简单了。我刚刚忘记将MyEnym ::添加到值中。从Java返回到C++时遇到的许多小问题之一。另外,在我的问题代码中,我忘了添加朋友声明,这是我的原始代码。感谢您的回答。
这不是容易切片对象? http://en.wikipedia.org/wiki/Object_slicing – 2013-10-27 21:30:14