通过构造函数初始化枚举

时间:2012-09-23 10:25:03

标签: c++ class function constructor enums

我有一个enum作为一个类的公共memebr如下“

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

我还声明了一个构造函数,一个公共参数化如下:

myClass(myEnum);

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

myClass :: myClass(myEnum E)
{
}

如何使用默认参数初始化myEnum?

我试过了:

i)

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

ⅱ)

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

ⅲ)

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);

我应该在哪里初始化枚举,正如下面的答案之一那样做?

1 个答案:

答案 0 :(得分:9)

好像你错误地用字段声明了类型声明。在您的类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) {};