Ваш код не включает другие заголовки, которые предположительно содержат определения GraphicsComponent
и PhysicsComponent
. Вы должны добавить что-то вроде
#include "otherHeader.h"
перед приведенными выше определениями структуры.
Обновление
Существует циклическая зависимость между вашими заголовками: AFGraphics.h и AFPhysics.h #include
AFObjectFactory.h. Вы должны устранить эту циклическую зависимость, чтобы код компилировался.
Самый простой способ - заменить #include в AFObjectFactory.h на предварительные объявления других ваших структур:
struct GraphicsComponent_t;
struct PhysicsComponent_t;
struct GameObjectComponent_t
{
struct GameObjectComponent_t* next;
};
typedef struct GameObjectComponent_t GameObjectComponent;
struct Sprite_t
{
GameObjectComponent GameObjectProperties;
struct GraphicsComponent_t GraphicsProperties;
struct PhysicsComponent_t PhysicsProperties;
};
Но лучшим долгосрочным подходом было бы перемещать вещи между заголовками, чтобы отсортировать правильный порядок, в котором они должны быть определены, и заголовками #include
d.
например. прямо сейчас AFPhysics.h содержит определение PhysicsComponent
и некоторые методы с параметрами Sprite
. Это делает невозможным синтаксический анализ заголовков компилятором без предварительного объявления, поскольку AFObjectFactory.h и AFPhysics.h взаимно зависят друг от друга.
Если вы переместили объявления методов с параметрами Sprite
в AFObjectFactory.h, зависимость AFPhysics.h от AFObjectFactory.h перестала существовать, поэтому вы можете удалить строку #include "AFObjectFactory.h"
из AFPhysics.h и вместо нее #include AFPhysics.h
в AFObjectFactory.h, устраняя необходимость пересылки объявить struct PhysicsComponent_t
там. (Конечно, возможны и другие механизмы - это самое простое, что приходит мне в голову. Смысл в том, чтобы сгруппировать ваши определения в заголовках, чтобы всегда был четко определенный порядок включения, без циклических зависимостей.)