为什么不能在这里访问枚举?

时间:2019-11-21 09:06:24

标签: c++ class initialization member-initialization

这是我的code/namespace

namespace myNamespace { 

enum MyType {
    ASD1,
    ASD2,
    ASD3
};

struct MyClass {
    MyType mMyType;

    MyClass(MyType myType = MyType::ASD1) : mMyType(myType) {

    }
};

}

现在,如果我在另一个结构中尝试此代码:

struct X
{
    myNamespace::MyClass *pMyClass1 = new myNamespace::MyClass(myNamespace::MyType::ASD2);
};

它工作正常,但是如果我尝试这样做:

struct X
{
    myNamespace::MyClass mMyClass1(myNamespace::MyType::ASD2);
};

它说'myNamespace::MyType::ASD2' is not a type

既然已经声明过了,为什么呢?

2 个答案:

答案 0 :(得分:5)

在内部类中,您可以使用<div class="cardgroup"> <div class="card"> Lorem Ipsum </div> <div class="card"> Lorem Ipsum </div> <div class="card"> Lorem Ipsum </div> </div>{..}语法,而不是= ..

(..)

答案 1 :(得分:3)

您必须使用大括号或相等的初始化程序。没有符号=的括号中不能使用初始化器。

来自C ++标准(12.2类成员)

member-declarator:
    declarator virt-specifier-seqopt pure-specifieropt
    declarator brace-or-equal-initializeropt
    identifieropt attribute-specifier-seqopt : constant-expression

例如

myNamespace::MyClass mMyClass1 { myNamespace::MyType::ASD2 };

myNamespace::MyClass mMyClass1 = myNamespace::MyType::ASD2;

最后一次初始化有效,因为构造函数是转换构造函数