Объявление объекта как переменной-члена

Я пишу игровой движок (использующий библиотеки 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,

Другие вопросы по тегам