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

mar*_*zzz 3 c++ initialization class member-initialization

这是我的代码/命名空间

namespace myNamespace { 

enum MyType {
    ASD1,
    ASD2,
    ASD3
};

struct MyClass {
    MyType mMyType;

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

    }
};

}
Run Code Online (Sandbox Code Playgroud)

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

struct X
{
    myNamespace::MyClass *pMyClass1 = new myNamespace::MyClass(myNamespace::MyType::ASD2);
};
Run Code Online (Sandbox Code Playgroud)

它完美地工作,但是如果我尝试这样做:

struct X
{
    myNamespace::MyClass mMyClass1(myNamespace::MyType::ASD2);
};
Run Code Online (Sandbox Code Playgroud)

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

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

Jar*_*d42 5

在类内部,您可以使用{..}= ..语法,而不是(..)

struct Test {
    myNamespace::MyClass mMyClass1{myNamespace::MyType::ASD2};
    // myNamespace::MyClass mMyClass1 = myNamespace::MyClass{myNamespace::MyType::ASD2};

};
Run Code Online (Sandbox Code Playgroud)