Форвардное объявление структур typedef в GBDK C
Я использую GBDK C, чтобы создать игру для оригинального Game Boy, и столкнулся с небольшой проблемой. Каждая комната в моей игре должна иметь разные portals
но каждый portal
должен ссылаться на комнату. Вот урезанная версия кода:
typedef struct {
Portal portals[10];
} Room;
typedef struct {
Room *destinationRoom;
} Portal;
Любые предложения о том, как этого добиться? Я попытался добавить предварительную декларацию struct Portal;
в начало файла, но это не помогло.
Используя следующий код:
typedef struct Room Room;
typedef struct Portal Portal;
struct Room {
Portal portals[10];
};
struct Portal {
Room *destinationRoom;
};
Дает мне эту ошибку:
parse error: token -> 'Room' ; column 11
*** Error in `/opt/gbdk/bin/sdcc': munmap_chunk(): invalid pointer: 0xbfe3b651 ***
1 ответ
Изменить порядок определений и написать предварительную декларацию для Room
а также Portal
типы:
typedef struct Room Room;
typedef struct Portal Portal;
struct Portal {
Room *destinationRoom;
};
struct Room {
Portal portals[10];
};
Обратите внимание, что я отделил typedef Portal
от фактического struct Portal
определение последовательности, хотя это не является строго необходимым.
Также обратите внимание, что этот стиль совместим с C++, где typedef неявный, но может быть написан явно таким образом, или с помощью простого предварительного объявления, такого как struct Room;
Если по какой-либо причине вы не можете использовать тот же идентификатор для struct
тег и typedef
, вы должны объявить структуры следующим образом:
typedef struct Room_s Room;
typedef struct Portal_s Portal;
struct Portal_s {
Room *destinationRoom;
};
struct Room_s {
Portal portals[10];
};