3

这是我的代码/命名空间

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

既然都已经声明过了,为什么会这样呢?

4

2 回答 2

5

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

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

};
于 2019-11-21T09:13:37.443 回答
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;

上次初始化是有效的,因为构造函数是转换构造函数

于 2019-11-21T09:15:38.213 回答