C++ 构造函数初始化错误
我正试图用以下命令初始化我的“cl”类: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初始化:
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};
// ^^^^^^^
};