C++ 构造函数初始化错误

C++ 构造函数初始化错误,c++,gcc,constructor,initialization,C++,Gcc,Constructor,Initialization,我正试图用以下命令初始化我的“cl”类: class Base { Base(int x){} private : Base(){} }; class Test { public: Base cl(12); }; 但我得到(使用gcc)错误:数字常量之前应该有标识符 我不想将“基本”默认构造函数设置为公共 任何“变通方法”?都会将其解析为函数声明,从而导致错误,因为参数应为以下类型: Base cl(12); 您可能需要一个Base数据成员,使用值12初始化:

我正试图用以下命令初始化我的“cl”类:

class Base
{
    Base(int x){}

private :
    Base(){}
};


class Test
{
public:
    Base cl(12);
};
但我得到(使用gcc)错误:数字常量之前应该有标识符 我不想将“基本”默认构造函数设置为公共


任何“变通方法”?

都会将其解析为函数声明,从而导致错误,因为参数应为以下类型:

Base cl(12);
您可能需要一个
Base
数据成员,使用值
12
初始化:

Base cl{12}; // requires C++11
如果不支持C++11,则可以在
Test
的构造函数初始化列表中初始化
cl

class Test
{
public:
  Test() : cl(12) {}
  Base cl;
};

不能通过构造函数调用在类中直接初始化数据成员。由于1,您的
c1
成员被解析为函数声明。一个错误的声明,尽管如此

在C++03及之前的版本中,需要通过构造函数的初始值设定项列表初始化类:

class Test
{
    public:
        Test() : cl(21)
        //     ^^^^^^^^
        {};

        Base cl;
};
在C++11中,这可以通过统一初始化轻松完成:


脚注:


1:最令人烦恼的解析是C++程序设计语言中的一种特殊的句法歧义消解形式。Wikipedia

您是否尝试使用默认的
测试
实例化将公共
cl
变量初始化为12?非常有启发性,谢谢。。。我不知道这个著名的有趣的“烦人解析”!?
class Test
{
    public:
        Base cl{21};
//           ^^^^^^^
};