2012-03-04 18 views
1

DnD-Text-Based-Style 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

0

タイプと同じ名前の変数を使用することはできません。変数名(または、その代わりに、タイプの名前を変更する)こと

rooms *rooms; 

変更何か他のものに:あなたのdungeon構造は、このフィールドのエントリがあります。あなたが今持っているものは、次のようなものです:

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; 
関連する問題