在结构中创建某个结构的数组。

时间:2011-12-03 18:27:39

标签: c++ arrays struct

我有一个名为scene的结构。在名为scene的结构中,我需要创建一个其他场景对象的数组。这可能吗?

4 个答案:

答案 0 :(得分:8)

不,因为在完全定义scene之前,编译器不知道它有多大,并且不知道制作数组的大小。

但是,你可以有一个指针的数组到scene,因为指针(不计算指向成员的指针和其他奇怪的东西 - 感谢Nawaz)都是相同的大小:

class scene {
    scene* array[20];
};

或者,您可以存储一个指针,该指针将指向一个分配有new[]并已使用delete[]取消分配的动态数组:

class scene {
    scene() : array(new scene[20]) { }
    ~scene() { delete[] array; }

    scene* array;
};

或者更确切地说,存储vector<scene>vector scene s:

class scene {
    vector<scene> array;
};

vector,你得到一个没有手动内存管理的可调整大小的数组。

答案 1 :(得分:2)

是。你可以做到这一点。但是你要将成员声明为指针

struct scene
{
     //other members

     scene *children; //this is what you need.
                      //you cannot make it like : scene children[100];
};

然后将动态数组创建为:

scene parent;
parent.chidren = new scene[100]; //100 children!

请记住,你自己要分配和释放内存。

或者,您可以使用std::vector<scene*>boost::ptr_vector<scene>

答案 2 :(得分:0)

当然有可能。

伪代码:

struct Scene {
   int id;
   Scene* scenes;
};

PS。你可以很容易地测试一下 - 不要太懒。 ;)

答案 3 :(得分:0)

如果您使用std::vector,则可以执行此操作。这是我昨天写的一些代码:

#include <vector>
struct ChangeList // Tree of changes in a tree of values
  {
  int index ;
  std::vector<ChangeList> Changes ;
  } ;