jbl*_*ixr 1 c++ member-initialization c++11
我开始学习C++中的嵌套类,我尝试了一个快速代码,我粘贴在这里看看嵌套类是如何工作的.但编译以一些我无法弄清楚的错误结束.
文件:check.cpp
class Outside{
public:
class Inside{
private:
int mInside;
public:
Inside(const int& x):mInside(x){}
};
private:
Inside mOutside(20);
};
int main(void){
Outside o;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译的错误 g++ -Wall -std=c++11 -o check.out check.cpp
check.cpp:12:25: error: expected parameter declarator
Inside mOutside(20);
^
check.cpp:12:25: error: expected ')'
check.cpp:12:24: note: to match this '('
Inside mOutside(20);
^
Run Code Online (Sandbox Code Playgroud)
我需要在此错误背后提供一个很好的解释以及如何克服此错误.
您必须使用=或{}进行就地成员初始化:
// ...
private:
Inside mOutside = 20;
Run Code Online (Sandbox Code Playgroud)
括号形式将是不明确的(它可能与函数声明混淆).
Inside mOutside{20};
Run Code Online (Sandbox Code Playgroud)
用clang++此触发警告:
警告:未使用私有字段'mInside'[-Wunused-private-field]
并且编译器有一个观点.奇怪的是另一种形式(=)缺少警告.