2016-06-24 6 views
0

Я пишу игровой движок (используя библиотеки SFML), и я не могу заставить его работать. Я пишу часть кода GUI, и я хочу объявить объект одного и того же класса внутри себя (parent/child, чтобы я мог связать объекты вместе). Я не могу этого сделать, если класс не будет создан. Есть ли какой-то временный способ, которым я могу заставить дочерние и родительские переменные как-то работать?Объявление объекта как переменной-члена самого себя

#ifndef ELEMENT_H 
#define ELEMENT_H 

#include <iostream> 

class Element 
{ 
    public: 
     Element(); 
    private: 
     int id, position_x, position_y, pixel_x, pixel_y, width, height; 

     Element parent; 
     std::vector<Element> child; 
}; 

#endif // ELEMENT_H 

Я получаю ошибку:

include\Element.h|13|error: field 'parent' has incomplete type 'Element'| 
+0

Если бы вы могли это сделать, элемент Element имел бы бесконечный размер. – melpomene

+0

OOoh, хорошая точка .. Что делать, если я сделал их необъявленными указателями? – Honor

+0

Имеется ли файл реализации? Если это не так, вы можете изменить родительский объект как ссылку: 'Element & parent' и инициализировать его в списке инициализации конструктора. – Jezor

ответ

1

Вы не можете объявить набор переменной типа Class <x> внутри себя, как у вас там.

Вы можете, однако, есть класс, который содержит элемент данных, который является указатель к себе ...

#ifndef ELEMENT_H 
#define ELEMENT_H 

#include <iostream> 

class Element 
{ 
    public: 
     Element(); 
    private: 
     int id, position_x, position_y, pixel_x, pixel_y, width, height; 

     Element *parent; 
     std::vector<Element *> child; 
}; 

#endif // ELEMENT_H 
+0

omfg !! да! Это то, что происходит, когда я программирую поздно ночью xD tyvm – Honor

+0

hahaha рад помочь! @Honor –

1

Вы можете parent типа Element* (или std::shared_ptr<Element>, если вы хотите использовать умные указатели на C++ 11/boost)

Можете ли вы представить себе проблему наличия элемента с элементом внутри него и элементом внутри него? Это никогда не закончится. Обычно такие цепи имеют один элемент, который является root, где parent = NULL.

+0

omfg большое спасибо ха-ха! Я не думал прошлой ночью x.x – Honor