我试图模仿C ++中的Java枚举,所以我创建了看起来像这样的代码(当然,我删除了与我的问题无关的所有内容):
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 ++时,我每天都会遇到许多小问题。另外,在我提出的问题的代码中,我忘记添加朋友声明,该声明在我的原始代码中。感谢您的回答。
最佳答案
首先回答您的问题:正确的文字
MyEnum.cpp
是:
MyEnum::Value1 MyEnum::VALUE1;
但这仍然行不通,因为您不会自动成为父母的朋友。所以也加
friend class MyEnum;
在
class MyEnum::Value1
的声明中关于c++ - C++如何定义静态成员,哪个类具有私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19623580/