我最近一直在制作一个Roguelike,并且已经使用这个特定代码获得了编译错误:
typedef const char* string;
typedef struct {
string name;
string desc;
int dice;
int sides;
} weapon;
typedef struct {
string name;
string desc;
int dice;
int sides;
} armor;
typedef struct {
string name;
char icon;
int x;
int y;
weapon wep;
armor arm;
int hp;
int maxhp;
} creature;
这是一个头文件。
另一个文件定义了外部变量:
extern creature monsters[MAX_MONSTERS];
extern creature level_cre[MAX_LEVELCRE];
extern weapon weapons[MAX_WEAPONS];
extern armor armors[MAX_ARMORS];
在定义武器和装甲阵列的文件中:
weapon weapons[MAX_WEAPONS] = {
{"Sword", "A steel sword", 1, 6},
};
armor armors[MAX_ARMORS] = {
{"Leather", "Leather armor", 1, 10},
};
正在给我一个错误的部分:
creature monsters[MAX_MONSTERS] = {
{"Skeleton", 's', 0, 0, weapons[0], armors[0], 100, 100},
{"Orc", 'o', 0, 0, weapons[0], armors[0], 100, 100},
};
运行这个给了我标题中的错误,并且在做了一些研究之后,它似乎来自于没有正确定义常量。我在这里完全不知道该做什么。任何帮助,将不胜感激。 :)
答案 0 :(得分:0)
ISO / IEC 9899:201x ,初始化,§4:
初始化程序中具有静态或。的对象的所有表达式 线程存储持续时间应为常量表达式或字符串 文字。
ISO / IEC 9899:201x ,常量表达式,§7:
初始值设定项中的常量表达式允许更多纬度。 这样的常数表达式应该是或者评估为其中之一 以下:
- 算术常量表达式,
- 空指针常量,
- 地址常量或
- 完整对象类型的地址常量加或减 整数常量表达式。
weapons[0]
和armors[0]
均不属于上述情况。但正如奥拉夫建议你可以改为
weapon *wep;
armor *arm;
…
{"Skeleton", 's', 0, 0, &weapons[0], &armors[0], 100, 100},
{"Orc", 'o', 0, 0, &weapons[0], &armors[0], 100, 100},
- &weapons[0]
和&armors[0]
是地址常量,因此可用于初始值设定项。