C++ взаимовключаемые типы
Понятия не имею как правильно назвать вопрос, извиняюсь заранее.
Интересует как реализовать в 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 так устроен что может быть объявлен с предварительно объявленным типом. Но вся работа с вектором возможна только после того как тип определён полностью. Соблюдая дисциплину в заголовочных файлов и файлах реализации вы получите нужный результат.