具有Long和指针的结构的默认构造函数
Default constructor for struct with Long and pointer
我正在学习c++。我有一个这样的结构:
struct Info {
const Long rate;
A* ptr;
}
我有一个构造函数,它将所有参数作为初始化结构的参数。但是,此结构是另一个类的一部分,该类将使用boost序列化进行序列化。为了序列化那个类,我需要这个结构的默认构造函数。然而,当我尝试编写一个默认构造函数,如时
Info () {
}
我得到一个错误C2758,成员速率应该在构造函数中初始化。如何获得这样一个结构的默认构造函数,我可以使用它来序列化我的类。
您需要初始化常数值,因此:
Info () : rate(0) {
}
错误可能是由于Long
类也没有默认构造函数。
有两种方法可以解决这个问题:
- 向
Long
添加默认构造函数,或者 - 将
rate
添加到Info
的构造函数的初始化列表中
您可以查看C2758的msdn文档以了解错误的描述。
在基本项中,常量变量必须在所有构造函数中初始化。编译器强制要求,在构造对象时,任何为const的内置类型或指针成员都必须初始化,因为在构造后你将没有机会给它一个有意义的值(如果你可以在创建后更改它,它的const是什么?)。
此外,根据一般经验,在所有类构造函数中,将没有默认构造函数(内置类型、指针和没有默认构造函数的对象)的成员初始化为某个对象总是一个好主意。否则,它们要么被初始化为一些随机值(基元或指针),要么会出现编译错误(没有默认构造函数的对象)。
Info()
: rate(0)
, ptr(nullptr)
{
}
如果您正在从构造函数参数为某些参数赋值,请不要忘记也为其他成员赋值。
Info( Long rate)
: rate( rate )
, ptr(nullptr)
{
}
试试这个:
struct Info {
const Long rate;
A* ptr;
Info():rate(0){} // as Matthew guessed, call the correct Long constructor
// or define a default constructor for Long
};
相关文章:
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 嵌套的模板结构构造函数实现
- 其他结构中的结构构造函数
- CPP/C 中的常量用法和结构构造函数中的澄清
- 聚合结构构造函数
- 结构构造函数调用不明确
- 关于结构构造函数和析构函数行为-C++
- 带有指针的C++结构:构造函数和析构函数
- 结构构造函数导致堆栈溢出的问题
- C++结构构造函数和函数冲突
- 嵌套结构构造函数和并集的问题
- C++结构构造函数
- 调用结构构造函数后初始化的值是什么
- 在结构构造函数中使用"this"关键字编译错误?-C++
- 这可能吗?在 C# 中调用托管 c++ 结构构造函数
- C++ - 结构构造函数,尝试取消指向结构的指针时出现重定义错误
- C++结构构造函数错误
- 结构构造函数语法
- 结构构造函数错误,为什么使用默认构造函数会调用错误
- Qt 将 QString 传递给结构构造函数不起作用