struct的默认构造函数,包含Long和pointer

时间:2013-08-20 16:41:50

标签: c++ default-constructor

我正在学习c ++。 我有这样的结构:

struct Info {

const Long rate;
A* ptr;

}

我有一个构造函数,它将所有参数作为参数来初始化struct。但是,此结构是另一个类的一部分,它将使用boost序列化进行序列化。为了序列化该类,我需要一个这个结构的默认构造函数。但是,当我尝试编写一个默认构造函数,如

Info () {
}

我得到一个错误C2758,应该在构造函数中初始化成员速率。 如何获得这样一个结构的默认构造函数,我可以使用它来序列化我的类。

4 个答案:

答案 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

   };