'房间'之前的预期说明符 - 限定符列表

时间:2012-03-04 23:39:27

标签: c data-structures error-handling game-engine

我正在开发基于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:error:在'rooms'之前的specifier-qualifier-list

你能帮我弄明白这是为什么吗?是因为我从包含房间的结构呼叫房间吗?请帮忙。

3 个答案:

答案 0 :(得分: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;)。您还需要确保定义怪物类型或至少具有前向声明。

答案 1 :(得分:0)

您不能拥有与类型同名的变量。您的dungeon结构包含此字段条目:

rooms *rooms;

将该变量名称(或者,重命名该类型)更改为其他名称。你现在拥有的是:

int int;

这显然不起作用!

答案 2 :(得分: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;