Проблема в том, что у вас есть циклическая зависимость.Извлеките #include "GameManager.h"
в Entity.h
, поскольку в этом заголовке это не нужно.(Голосование с повышением этот ответ , который первым указал на него.)
Обратите внимание, что проблема заключается в охранниках;но не вынимай их!Вам просто нужно минимизировать количество включений, которые у вас есть, и объявлять (а не определять) типы, когда это возможно.Рассмотрим, что происходит, когда вы включаете Entity.h
: в качестве некоторого пункта он включает GameManager.h
, что, в свою очередь, включает Entity.h
.На этом этапе у Entity.h
уже определена защита заголовка, поэтому он пропускает содержимое.Затем анализ GameManager.h
продолжается, после чего он сталкивается с Entity
и справедливо жалуется, что он не определен.(Действительно, это все еще процесс включения GameManager.h
в первое включение Entity.h
, задолго до того, как определен Entity
!)
Обратите внимание, что ваши многочисленные правки демонстрируют, почему важно размещать реальный код,не повторно синтезированный код.Вам нужны реальные данные, чтобы получить реальные ответы.
Старый:
Entity
находится в пространстве имен Psyco2D
.Вам необходимо указать, что:
class GameManager{
private:
std::vector<Psyco2D::Entity> entities;
};