错误的构造函数初始化

Wrong constructor initialization

本文关键字:初始化 构造函数 错误      更新时间:2023-10-16

我试图用这个初始化我的"cl"类:

class Base
{
    Base(int x){}
private :
    Base(){}
};

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

但是我得到(与gcc) 错误:预期的标识符之前的数字常量我不想把Base默认构造函数设为public

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

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中,这可以通过uniform-initialization:

轻松完成
class Test
{
    public:
        Base cl{21};
//           ^^^^^^^
};

脚注:

1: 最令人烦恼的解析是c++编程语言....中一种特定形式的语法歧义解析 ~ Wikipedia