Объявление объекта как переменной-члена
Я пишу игровой движок (использующий библиотеки SFML) и не могу заставить его работать. Я пишу часть кода GUI, и я хочу объявить объект того же класса внутри себя (родительский / дочерний, чтобы я мог связать объекты вместе). Я не могу сделать это, пока не закончится создание класса. Есть ли какой-то временный способ заставить дочерние и родительские переменные как-то работать?
#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'|
2 ответа
Вы не можете объявить переменную набора типа 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
Ты можешь сделать parent
типа Element*
(или же std::shared_ptr<Element>
если вы хотите использовать функцию умных указателей в C++11/boost)
Можете ли вы представить себе проблему наличия элемента с элементом внутри него и элементом внутри него? Это никогда не закончится. Как правило, такие цепи имеют один элемент, который является root
, где parent = NULL
,