我已经发现了这个:c ++中的extern enum 但它对我帮助不大.我有一个config.h和config.hi中的config.cpp有我的枚举:
#ifndef CONFIG_H
#define CONFIG_H
extern enum Items;
#endif
Run Code Online (Sandbox Code Playgroud)
在我的config.cpp中,我声明了枚举:
#include "config.h"
enum Items {
PAC = 'C', GHOST = '@', FRUIT = 'o', POINTS = '.', WALL = '#', EMPTY = ' ', UNDEFINED = '+'
} fieldItems;
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试编译它,编译器会给我以下错误:
config.cpp:20:13: error: a storage class can only be specified for objects and functions
extern enum Items;
^
Run Code Online (Sandbox Code Playgroud)
您将无法在enum外部定义.在C++ 11中,您可以转发声明enum,但是:
enum class Items: char;
Run Code Online (Sandbox Code Playgroud)
......然后定义它:
enum class Items: char {
PAC = 'C', GHOST = '@', FRUIT = 'o', POINTS = '.', WALL = '#', EMPTY = ' ', UNDEFINED = '+'
};
Run Code Online (Sandbox Code Playgroud)
但请注意,只能在看到定义的位置使用枚举器标记.
根据您对多个定义的评论,您的标头中没有包含保护,并且多次包含相同的标头.也就是说,似乎你可以有这样的标题:
// items.h
#ifndef INCLUDED_ITEMS
#define INCLUDED_ITEMS
enum Items { ... };
#endif
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,你试图将游戏的表现形式折叠成他们名字的定义.这可能不工作也很好,尤其是因为它们可能会改变外观(您可能希望有PAC交替C和O,例如).很可能实际的代码会谈论这些名称,你会在多个地方.只需使用a enum来定义不为它们定义任何值的不同项,并在其他地方定义它们的表示:
enum Items { PAC, GHOST, FRUIT, POINTS, WALL, EMPTY, UNDEFINED };
extern char ItemDisplay[];
// elsewhere
char ItemDisplay[] = { 'C', '@', 'o', '.', '#', ' ', '+' };
Run Code Online (Sandbox Code Playgroud)
...然后只需ItemDisplay[item]在需要绘制时使用item.