为什么不能在这里访问枚举?
Why can't access to enum here?
这是我的 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
。
之前都声明过,为什么会这样?
在 class 中,您可以使用 {..}
或 = ..
语法,而不是 (..)
:
struct Test {
myNamespace::MyClass mMyClass1{myNamespace::MyType::ASD2};
// myNamespace::MyClass mMyClass1 = myNamespace::MyClass{myNamespace::MyType::ASD2};
};
您必须使用大括号或等于初始化程序。您不能在没有符号 =.
的括号中使用初始化程序
来自 C++ 标准(12.2 Class 成员)
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;
最后一次初始化有效,因为构造函数是转换构造函数
这是我的 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
。
之前都声明过,为什么会这样?
在 class 中,您可以使用 {..}
或 = ..
语法,而不是 (..)
:
struct Test {
myNamespace::MyClass mMyClass1{myNamespace::MyType::ASD2};
// myNamespace::MyClass mMyClass1 = myNamespace::MyClass{myNamespace::MyType::ASD2};
};
您必须使用大括号或等于初始化程序。您不能在没有符号 =.
的括号中使用初始化程序来自 C++ 标准(12.2 Class 成员)
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;
最后一次初始化有效,因为构造函数是转换构造函数