2012-03-04 88 views
1

我正在編寫一個基於DnD-Text-Based的C風格遊戲,並且我在編譯結構時遇到問題。 這裏是我迄今的結構:「房間」前的預期說明符 - 限定符列表

typedef struct stats {     // 
    int strength;    // 
    int wisdom;     // 
    int agility;    // 
} stats; 

typedef struct rooms { 
    int n_monsters; 
    int visited; 
    rooms nentry; 
    rooms sentry; 
    rooms wentry; 
    rooms eentry; 
    monster *monsters; 
} rooms; 

typedef struct monster { 
    int difficulty; 
    char *name; 
    char *type; 
    int hp; 
} monster; 

typedef struct dungeon { 
    char *name; 
    int n_rooms; 
    rooms *rooms; 
} dungeon; 

typedef struct player { 
    int maxhealth; 
    int curhealth; 
    int mana; 
    char *class; 
    char *condition; 
    stats stats; 
    rooms c_room; 
} player; 

typedef struct game_structure { 
    player p1; 
    dungeon d; 
} game_structure; 

當我編譯它,我得到的錯誤: structure.h:21:錯誤:符限定符列表前「房」

你能幫我弄清楚這是爲什麼嗎?是因爲我從包含房間的結構中呼叫房間?請幫忙。

回答

1

有很多很多問題,這段代碼。首先是結構定義必須知道要分配多少內存,並且在包含尚未完全定義的類型時不能這樣做(這就是人們推薦使用指針的原因,因爲指針的大小是在編譯時已知)。

但是,這很重要,只需更改指針即可解決問題,因爲在適當的typedef完成之前遇到第一個房間*。您需要寫下如下內容:

struct rooms { 
    int n_monsters; 
    int visited; 
    struct rooms *nentry; 
    struct rooms *sentry; 
    struct rooms *wentry; 
    struct rooms *eentry; 
    monster *monsters; 
} rooms; 

或執行前向聲明(typedef struct rooms rooms;)。您還需要確保怪物類型已定義或至少具有前向聲明。

+0

謝謝!這是最有幫助的,並幫助我瞭解問題。 – atb 2012-03-05 01:38:59

0

您不能擁有與某個類型同名的變量。您dungeon結構具有該領域的條目:

rooms *rooms; 

更改變量名稱(或者,重命名型)到別的東西。你現在有什麼類似於:

int int; 

這顯然不會工作!

0
typedef struct rooms { 
    int n_monsters; 
    int visited; 
    rooms nentry; 
    rooms sentry; 
    rooms wentry; 
    rooms eentry; 
    monster *monsters; 
} rooms; 

貌似rooms是一個遞歸式,你肯定想用指針來代替:

typedef struct rooms rooms; 

struct rooms { 
    int n_monsters; 
    int visited; 
    rooms *nentry; 
    rooms *sentry; 
    rooms *wentry; 
    rooms *eentry; 
    monster *monsters; 
} rooms; 
相關問題