2012-03-04 89 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; 
相关问题