gpt4 book ai didi

C++如何定义静态成员,哪个类有私有(private)构造函数?

转载 作者:行者123 更新时间:2023-11-28 07:20:06 32 4
gpt4 key购买 nike

我试图在 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();
};

我将构造函数设为私有(private),因此枚举值的唯一实例是 BaseEnum 的静态成员。如何定义它们?

MyEnum.cpp

MyEnum::Value1 VALUE1=MyEnum::Value1();

这给了我

error: calling a private constructor of class 'MyEnum::Value1'

编辑:那太简单了。我只是忘记将 MyEnym::添加到值中。这是我从 Java 回到 C++ 时遇到的许多日常小问题之一。另外,在我的问题代码中,我忘记添加 friend 声明,这是在我的原始代码中。感谢您的回答。

最佳答案

假设你不使用 C++11 来做,这是解决方案——让类彼此成为 friend ,这样 Enum 类可以实例化子类,子类可以调用基类构造函数,我还添加了缺失的部分使代码可编译:

class MyEnum
{
public:
class Value1;
class Value2;

friend class Value1;
friend class Value2;

static Value1 VALUE1;
static Value2 VALUE2;

private:
MyEnum(std::string name) {}
};

class MyEnum::Value1 : public MyEnum
{
friend class MyEnum;
private:
Value1() : MyEnum("VALUE1") {}
};

class MyEnum::Value2 : public MyEnum
{
friend class MyEnum;
private:
Value2() : MyEnum("VALUE2") {}
};

MyEnum::Value1 MyEnum::VALUE1;
MyEnum::Value2 MyEnum::VALUE2;

int main()
{
// Use statuc enum value
MyEnum::Value1 &someValue = MyEnum::VALUE1;

return 0;
}

关于C++如何定义静态成员,哪个类有私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623580/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com