我已经找到了:extern enum in c++ 但这对我没有太大帮助。我在 config.h 中有一个 config.h 和一个 config.cpp 我有我的枚举:
#ifndef CONFIG_H
#define CONFIG_H
extern enum Items;
#endif
在我的 config.cpp 中我声明了枚举:
#include "config.h"
enum Items {
PAC = 'C', GHOST = '@', FRUIT = 'o', POINTS = '.', WALL = '#', EMPTY = ' ', UNDEFINED = '+'
} fieldItems;
但是如果我尝试编译它,编译器会给我以下错误:
config.cpp:20:13: error: a storage class can only be specified for objects and functions
extern enum Items;
^
最佳答案
您将无法在外部定义enum
。在 C++11 中,您可以转发声明一个 enum
,但是:
enum class Items: char;
...然后定义它:
enum class Items: char {
PAC = 'C', GHOST = '@', FRUIT = 'o', POINTS = '.', WALL = '#', EMPTY = ' ', UNDEFINED = '+'
};
但是请注意,您只能在看到定义的地方使用枚举器标记。
根据您对多个定义的评论,您的 header 中没有包含防护装置,并且同一个 header 被多次包含。也就是说,似乎你可以有一个像这样的标题:
// items.h
#ifndef INCLUDED_ITEMS
#define INCLUDED_ITEMS
enum Items { ... };
#endif
从表面上看,您正试图将游戏的表示形式折叠到它们名称的定义中。这可能效果不太好,尤其是它们可能会改变外观(您可能希望让 PAC
在 C
和 O
之间交替,因为例子)。实际代码很可能会讨论这些名称,并且您会在多个地方使用它们。只需使用 enum
来定义不同的项目而不为它们定义任何值并在别处定义它们的表示:
enum Items { PAC, GHOST, FRUIT, POINTS, WALL, EMPTY, UNDEFINED };
extern char ItemDisplay[];
// elsewhere
char ItemDisplay[] = { 'C', '@', 'o', '.', '#', ' ', '+' };
...然后在需要绘制 item
时使用 ItemDisplay[item]
。
关于C++ 外部枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20629368/