嵌套类.error:期望的参数声明符 - 用于内部类实例

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)

我需要在此错误背后提供一个很好的解释以及如何克服此错误.

man*_*lio 5

您必须使用=或{}进行就地成员初始化:

// ...
private:
    Inside mOutside = 20;
Run Code Online (Sandbox Code Playgroud)

括号形式将是不明确的(它可能与函数声明混淆).


Inside mOutside{20};
Run Code Online (Sandbox Code Playgroud)

用clang++此触发警告:

警告:未使用私有字段'mInside'[-Wunused-private-field]

并且编译器有一个观点.奇怪的是另一种形式(=)缺少警告.