ОК, сейчас у меня дилемма, и ни мое знание C (которое в любом случае не самое большое), ни всемогущий Google, похоже, не могут мне помочь в этом:
У меня есть несколько структур для прототипа игры:
Map
(Ммм ... Карта ..)
Chara
(База для врагов игроков)
Player
(Игрок)
Теперь проблема в том, что Map
нужна ссылка на Player
, который находится на нем, Player
создается, давая ему Map
и Chara
, а Chara
требуется Map
тоже.
Если я объявляю структуры в заголовочных файлах и заключаю их в #ifndef
, я запускаю циклический цикл зависимости, когда включаю заголовки из других заголовков.
Когда я объявляю структуры в файлах .c, я использую extern struct Map map
и т. Д., Но затем я сталкиваюсь с проблемой, подобной invalid use of incomplete declaration
или forward declaration of struct XXX
.
Здесь 4 часа утра, и я хотел бы больше времени уделить переписыванию движка (который уже существует как в Python, так и в JavaScript ... да, у меня слишком много времени!), А не пробуя каждую возможную комбинацию поисковых терминов до конца ночи.
Я знаю, что это может быть ДЕЙСТВИТЕЛЬНО легкая вещь, но здесь 30 ° C, поэтому, пожалуйста, смилуйтесь с моими "навыками" C ^^
EDIT
Поскольку в моей задаче использовались typedefs, а ответ caf не включал их, мне пришлось немного поиграться с этим, чтобы все заработало. Поэтому, чтобы помочь людям, которые могут найти этот ответ через SE, я добавлю код ниже:
map.h
typedef struct _Player Player;
typedef struct _Map {
...
Player *player;
...
} Map;
map.c
// include both player.h and chara.h
player.h
typedef struct _Map Map;
typedef struct _Chara Chara;
typedef struct _Player {
Chara *chara;
...
} Player;
Player *player_create(Map *map, int x, int y);
player.c
// include player.h, chara.h and map.h