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