具有Long和指针的结构的默认构造函数

Default constructor for struct with Long and pointer

本文关键字:结构 构造函数 默认 指针 Long 具有      更新时间:2023-10-16

我正在学习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
   };