错误的构造函数初始化
Wrong constructor initialization
我试图用这个初始化我的"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
相关文章:
- 为什么std::vector和std::valarray初始化构造函数不同
- 初始化构造函数C++中结构的向量
- C++ 中常量属性的初始化构造函数错误
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- 如何通过参数初始化构造函数中的数组?
- 是否有理由使用 malloc 初始化构造函数中的指针
- 如何在 c++ 中初始化构造函数中的二维数组
- 为什么初始化构造函数列表参数时会发生异常?
- 无法初始化构造函数
- 初始化构造函数的默认参数的优选方法是什么?
- 在C++17中使用空列表初始化构造函数时发生编译错误
- C++ 初始化构造函数初始化列表中的嵌套结构?
- 初始化构造函数c++中的向量
- g++ (GCC) 4.6.0 我有以下类,我正在尝试初始化构造函数的结构成员初始化列表
- 使用字符串文本初始化构造函数中的 std::array<char,x> 成员。海湾合作委员会错误?
- 初始化构造函数C++中函数的成员指针
- 在c++中初始化构造函数中的静态成员变量时出错
- memset()初始化构造函数中的对象
- 初始化构造函数C++中的成员向量