我开始学习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;
}
我在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);
^
我需要在此错误背后提供一个很好的解释,以及如何克服此错误。
答案 0 :(得分:5)
您必须使用=
或{}
进行就地成员初始化:
// ...
private:
Inside mOutside = 20;
括号表单不明确(可能是confused with a function declaration)。
Inside mOutside{20};
使用clang++
会触发警告:
警告:私人领域' mInside'未使用[-Wunused-private-field]
并且编译器有一个观点。奇怪的是,另一种形式(=
)缺少警告。
答案 1 :(得分:1)
尝试使用这种成员初始化方式。
Inside mOutside = Inside(20);
是的,您的解决方案有效,谢谢。但是怎么样?为什么?