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

时间:2016-03-12 08:19:59

标签: c++ c++11 member-initialization

我开始学习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);
                       ^

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

2 个答案:

答案 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);
  

是的,您的解决方案有效,谢谢。但是怎么样?为什么?

请参阅Initializing bases and members in open-std