c++ - 在 C++ 的类构造函数中初始化结构数组

标签 c++ arrays constructor struct initialization

我的头文件中有一个结构

 struct Foo{
     timeval t;
     struct Bar b;
 }

我在同一个头文件中还有另一个用于 Bar 的类,我也在头文件中声明了一个类。

 class Layer{
      public:
              ...
              ...
      private:
              struct Foo myarray[];
 }

我想在我的头文件中声明一个 Foo 数组,并在我的类构造函数中初始化它

 Layer::Layer(unsigned int size)
 {
       myarray = new Foo[size];
 }

但是编译时会返回错误。 错误:将“Foo*”分配给“Foo [0]”时类型不兼容

知道如何解决这个问题吗?

最佳答案

这不是初始化数组,而是分配它。要初始化它,您需要一个成员初始化程序:

Layer::Layer(unsigned int size) : myarray(new Foo[size]){}

但是,这不会编译,因为您有一个数组,需要使用编译时已知的一个大小进行初始化(如果未指定维度,则通过初始化列表),并且该大小不能改变。改用 vector :

std::vector<Foo> myarray;

Layer::Layer(unsigned int size) : myarray(size){}

如果 vector 不是一个选项,你至少需要一个指针来新建它,但是三/五规则的东西开始应用,一切都变得一团糟。如果可以,请坚持使用 vector 。

关于c++ - 在 C++ 的类构造函数中初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12889972/

相关文章:

javascript - 为什么函数在构造函数中声明时不使用 new 关键字?

c++ - 为什么我无法调用 'explicit a (string x)' ?

c# - WIX 自定义操作 : use dllimport

c++ - 将结构传递到具有特殊 Fork() 定义的线程中

c++ - 将指针类型派生到非指针类成员

java - 删除元素后向上移动连续索引

java - 是否可以检查两个数组是否不相等

java - 我需要帮助传递数组并调用其基本方法

C++ 以 utf 8 字符写入 mysql 数据库?

javascript - 为什么某些对象方法的声明方式与其他方法不同