我试图模仿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/

10-13 05:18