构造函数初始化错误

时间:2013-06-09 14:15:08

标签: c++ gcc constructor initialization

我试图用以下方式初始化我的“cl”类:

class Base
{
    Base(int x){}

private :
    Base(){}
};


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

但我得到(使用gcc)错误:数字常量之前的预期标识符 而且我不想将“Base”默认构造函数设置为public

任何“解决方法”?

2 个答案:

答案 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