通过构造函数初始化枚举

5

我有一个枚举类型作为类的公共成员,如下所示:

class myClass
{
    public:
        enum myEnum
        {
            myEnum1,
            myEnum2
        };
};

我也声明了一个构造函数,一个公共参数化构造函数如下所示:
myClass(myEnum);

我将在类定义之外定义相同的内容如下:

我定义如下:

myClass :: myClass(myEnum E)
{
}

我可以帮助您翻译以下内容,这是关于IT技术的问题:“如何使用默认参数初始化我的枚举?”

我尝试过:

i)

myClass :: myClass(myEnum E = 0); //to int error

ii)

myClass :: myClass(myEnum E = {0}); //some error

iii)

myClass :: myClass(myEnum E = {0, 1}); //some error

我仍然不明白的一件事。

我应该如何将枚举值传递给构造函数。我仍然收到一个错误。而且,我必须按照以下方式完成:

derived(arg1, arg2, arg3, enumHere, arg4, arg5); //call

函数定义:

derived(int a, int b, int c, enumHere, int 4, int 5) : base(a, b);

我应该在哪里初始化枚举,就像下面的一个答案所做的那样?


2
在我的回答中,我假设这是C++,但标签并没有说明这一点。如果你能修正这个问题,那么你的问题将会得到更多的关注。 - Bartosz
@Bartosz:确实是C++。现在已经更改了标签。谢谢。 - Kuttu V
1个回答

10

看起来你将类型声明和字段混淆了。在你的类中,myEnum 是类型声明,而该类本身不持有该类型的任何字段。

尝试这样做:

class myClass
{
    public:
        enum myEnum
        {
            myEnum1,
            myEnum2
        } enumField;
};

那么,你的构造函数应该使用成员初始化:

myClass::myClass() : enumField(myEnum1) {};

如果您想要参数化构造函数:

myClass::myClass(myEnum e) : enumField(e) {};

如果你想要带默认参数的参数化构造函数:

myClass(myEnum e = myEnum1) : enumField(e) {};

如果你想在派生类中使用上述构造函数:

myDerived(myEnum e) : myClass(e) {};

1
谢谢。但是如果我使用下面的形式的构造函数:derived(x,y,z) : base(x,y),那我应该把它放在哪里? - Kuttu V
2
在我的答案中添加了几个情况。 - Bartosz
请注意,单参数构造函数可用于将myEnum转换为myClass。如果不希望这样,请使用explicit关键字。 - Cem Kalyoncu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接