我试图用以下方式初始化我的“cl”类:
class Base
{
Base(int x){}
private :
Base(){}
};
class Test
{
public:
Base cl(12);
};
但我得到(使用gcc)错误:数字常量之前的预期标识符 而且我不想将“Base”默认构造函数设置为public
任何“解决方法”?
答案 0 :(得分:3)
这被解析为函数声明,导致错误,因为参数应该是一个类型:
Base cl(12);
您可能想要一个Base
数据成员,使用值12
进行初始化:
Base cl{12}; // requires C++11
如果您没有C ++ 11支持,那么您可以在cl
的构造函数初始化列表中初始化Test
:
class Test
{
public:
Test() : cl(12) {}
Base cl;
};
答案 1 :(得分:1)
无法通过构造函数调用直接在类中初始化数据成员。由于 Most Vexing Parse 1 ,您的c1
成员将被解析为函数声明。一个不正确的声明,虽然。
在C ++ 03及之前,你需要通过构造函数的初始化列表初始化你的类:
class Test
{
public:
Test() : cl(21)
// ^^^^^^^^
{};
Base cl;
};
在C ++ 11中,可以通过 uniform-initialization :
轻松完成class Test
{
public:
Base cl{21};
// ^^^^^^^
};
脚注:
1:最令人烦恼的解析是C ++编程语言中一种特定形式的句法歧义解析.... ~Wikipedia