[英]Forward declaration of typedef structs in GBDK C
我正在使用GBDK C為原版Game Boy創建游戲,我遇到了一個小問題。 我的游戲中的每個房間都需要有不同的portals
,但每個portal
需要引用一個房間。 這是代碼的縮減版本:
typedef struct {
Portal portals[10];
} Room;
typedef struct {
Room *destinationRoom;
} Portal;
有關如何實現這一目標的任何建議? 我嘗試添加struct 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 ***
重新排序定義並為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];
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.