Создание массива определенной структуры в структуре. - PullRequest
2 голосов
/ 03 декабря 2011

У меня есть структура, которая называется сцена.В структуре, называемой scene, мне нужно создать массив других объектов сцены.Это возможно?

Ответы [ 4 ]

8 голосов
/ 03 декабря 2011

Нет, поскольку до того, как scene будет полностью определено, компилятор не знает, насколько он велик, и не знает, какой размер сделать массив.

Однако вы можете иметь массивиз указателей до scene, потому что указатели (не считая указателей на членов и других странностей - спасибо Навазу) имеют одинаковый размер:

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 вы получаете массив с изменяемым размером без ручного управления памятью.

2 голосов
/ 03 декабря 2011

Да.Вы можете сделать это.Но вы должны объявить член как указатель как:

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>.

0 голосов
/ 03 декабря 2011

Вы можете сделать это, если используете std::vector.Это из некоторого кода, который я написал вчера:

#include <vector>
struct ChangeList // Tree of changes in a tree of values
  {
  int index ;
  std::vector<ChangeList> Changes ;
  } ;
0 голосов
/ 03 декабря 2011

Конечно, это возможно.

псевдокод:

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

PS. Вы можете легко проверить это - не будьте такими ленивыми. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...