C++ взаимовключаемые типы

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2023

Понятия не имею как правильно назвать вопрос, извиняюсь заранее.

Интересует как реализовать в C++ примерно следущее

ex1.cpp

#include "ex2.cpp"
#include "vector"

class Ex1{
public:
 std::vector<Ex2> objects;
};

ex2.cpp

#include "ex1.cpp"

class Ex2{
public:
 Ex1 rootObj;
};

Логично, что такой код работать не будет(по крайней мере мои попытки запустить провалились). Хочу узнать как грамотно реализовать что-то подобное, но рабочее

Ответы

▲ 1

Объявите предварительно Ex2. Ещё надо будет отделить заголовочные файлы от файлов реализации (это я опустил). Всё компилируется и работает:

#include <vector>

class Ex2;

class Ex1{
public:
    std::vector<Ex2> objects;
};

class Ex2{
public:
    Ex1 rootObj;
};

int main() {
    Ex1 ex1;
    Ex2 ex2;
    ex1.objects.push_back(ex2);
}

P.S. В действительности вопрос не так прост. std::vector так устроен что может быть объявлен с предварительно объявленным типом. Но вся работа с вектором возможна только после того как тип определён полностью. Соблюдая дисциплину в заголовочных файлов и файлах реализации вы получите нужный результат.