Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';你不能在这里访问枚举吗?_C++_Class_Initialization_Member Initialization - Fatal编程技术网

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;