1

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

我需要这个错误背后的一个很好的解释以及如何克服这个错误。

4

2 回答 2

6

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

// ...
private:
    Inside mOutside = 20;

括号形式会模棱两可(它可能与函数声明混淆)。


Inside mOutside{20};

这样clang++会触发警告:

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

并且编译器有一点。奇怪的是,另一种形式 ( =) 中缺少警告。

于 2016-03-12T08:23:37.663 回答
1

尝试使用这种成员初始化方式。

Inside mOutside = Inside(20);

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

请参阅在 open-std 中初始化基和成员

于 2016-03-12T08:23:01.573 回答