【问题标题】:Initialising enum via constructors通过构造函数初始化枚举
【发布时间】:2012-09-15 02:46:15
【问题描述】:

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

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

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

myClass(myEnum);

我在类定义之外定义如下:

myClass :: myClass(myEnum E)
{
}

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

我试过了:

我)

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

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

【问题讨论】:

  • 在我的回答中,我假设它是 c++,标签没有说这个,你可以解决这个问题,那么你的问题会得到更多的关注。
  • @Bartosz:确实是 C++。现在换了标签。谢谢。

标签: c++ class function constructor enums


【解决方案1】:

似乎您将类型声明与字段弄错了。在您的类中,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) {};

【讨论】:

  • 谢谢。但是,如果我使用以下形式的构造函数:derived(x, y, z) : base(x, y) 会怎样?那我把上面的放在哪里呢?
  • 在我的回答中添加了几个案例。
  • 请注意,可以使用单参数构造函数将 myEnum 强制转换为 myClass。如果不需要,请使用显式。
猜你喜欢
  • 2021-08-03
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多