我正在学习c ++。 我有这样的结构:
struct Info {
const Long rate;
A* ptr;
}
我有一个构造函数,它将所有参数作为参数来初始化struct。但是,此结构是另一个类的一部分,它将使用boost序列化进行序列化。为了序列化该类,我需要一个这个结构的默认构造函数。但是,当我尝试编写一个默认构造函数,如
Info () {
}
我得到一个错误C2758,应该在构造函数中初始化成员速率。 如何获得这样一个结构的默认构造函数,我可以使用它来序列化我的类。
答案 0 :(得分:1)
您需要初始化常量值,所以:
Info () : rate(0) {
}
答案 1 :(得分:1)
错误可能是由于您的Long
类也没有默认构造函数。
有两种解决方法:
Long
或rate
添加到Info
的构造函数的初始化列表中。答案 2 :(得分:1)
您可以查看C2758的msdn文档,了解错误说明。
在基本术语中,必须在所有构造函数中初始化const变量。编译器强制执行构造对象时必须初始化任何const的内置类型或指针成员,因为在构造之后你没有机会给它一个有意义的值(如果你可以在创建之后更改它,它怎么是const?)。
另外,作为一般的经验法则,在所有类构造函数中初始化没有默认构造函数(内置类型,指针和没有默认构造函数的对象)的成员总是一个好主意。否则,它们将初始化为一些随机值(基元或指针),否则您将收到编译错误(没有默认构造函数的对象)。
Info()
: rate(0)
, ptr(nullptr)
{
}
如果要从构造函数参数为某些参数赋值,请不要忘记为其他成员分配值。
Info( Long rate)
: rate( rate )
, ptr(nullptr)
{
}
答案 3 :(得分:0)
试试这个:
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
};