-1

我试图用它来初始化我的“cl”类:

class Base
{
    Base(int x){}

private :
    Base(){}
};


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

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

任何“解决方法”?

4

2 回答 2

3

这被解析为函数声明,导致错误,因为参数应该是一个类型:

Base cl(12);

你可能想要一个Base数据成员,用 value 初始化12

Base cl{12}; // requires C++11

如果您没有 C++11 支持,那么您可以clTest的构造函数初始化列表中进行初始化:

class Test
{
public:
  Test() : cl(12) {}
  Base cl;
};
于 2013-06-09T14:17:23.263 回答
1

不能通过构造函数调用直接在类中初始化数据成员。由于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

于 2013-06-09T14:24:30.833 回答