C++ 为什么可以';你不能在这里访问枚举吗?
这是我的: 现在,如果我尝试在另一个结构中执行以下代码:C++ 为什么可以';你不能在这里访问枚举吗?,c++,class,initialization,member-initialization,C++,Class,Initialization,Member Initialization,这是我的: 现在,如果我尝试在另一个结构中执行以下代码: struct X { myNamespace::MyClass *pMyClass1 = new myNamespace::MyClass(myNamespace::MyType::ASD2); }; 它工作得很好,但如果我尝试一下: struct X { myNamespace::MyClass mMyClass1(myNamespace::MyType::ASD2); }; 它说,“myNamespace::MyT
struct X
{
myNamespace::MyClass *pMyClass1 = new myNamespace::MyClass(myNamespace::MyType::ASD2);
};
它工作得很好,但如果我尝试一下:
struct X
{
myNamespace::MyClass mMyClass1(myNamespace::MyType::ASD2);
};
它说,“myNamespace::MyType::ASD2”不是类型
既然它以前都声明过,为什么会这样?在类内部,您可以使用
{..}
或=..
语法,而不是(..
):
必须使用大括号或相等的初始值设定项。不能在括号中使用不带符号=的初始值设定项 <> >从C++标准(12.2类成员) 比如说
myNamespace::MyClass mMyClass1 { myNamespace::MyType::ASD2 };
或
最后一次初始化是有效的,因为构造函数是一个转换构造函数可能类似于编译器将第二个代码理解为函数的前向声明
myNamespace::MyClass mMyClass1(myNamespace::MyType::ASD2)
被解读为函数声明啊,看看你的代码示例,问题是你试图用初始化器声明一个成员变量,而这是你在类范围内做不到的。尝试intx(3)代码>-这也是不允许的。与名称空间或枚举无关。在类范围内,编译器认为这应该是一个函数,而不是一个初始化代码>…所以这是最麻烦的解析,对吗?
struct Test {
myNamespace::MyClass mMyClass1{myNamespace::MyType::ASD2};
// myNamespace::MyClass mMyClass1 = myNamespace::MyClass{myNamespace::MyType::ASD2};
};
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;