簡體   English   中英

在GBDK C中轉發typedef結構的聲明

[英]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 ***

重新排序定義並為RoomPortal類型編寫前向聲明:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM