我正在开发基于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
你能帮我弄明白这是为什么吗?是因为我从包含房间的结构呼叫房间吗?请帮忙。
答案 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;