我有一个名为scene的结构。在名为scene的结构中,我需要创建一个其他场景对象的数组。这可能吗?
答案 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 ;
} ;