[英]C++ extern enums
我已经发现了这个: c ++中的extern enum但它对我帮助不大。 我有一个config.h和config.hi中的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 = '+'
};
但请注意,只能在看到定义的位置使用枚举器标记。
根据您对多个定义的评论,您的标头中没有包含保护,并且多次包含相同的标头。 也就是说,似乎你可以有这样的标题:
// 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]
。
你的问题的答案是你需要使用它来extern extern Items fieldItems;
尝试在头文件中使用枚举定义,然后尝试extern
您定义了一个类型,而不是一个变量。 类型不能是静态的或外部的。 您必须声明该类型的变量。
extern enum Items没有声明任何内容:它只是告诉你有一个名为Items的枚举类型。 我想你真正想要的是
extern enum Items fieldItems;
另外
enum Items;
extern Items fieldItems;
extern enum Items;
是语法错误。
您可以使用extern
声明要在其他位置定义的要引用的链接时实体。 但是,枚举是编译时常量的集合; 它们在目标文件中没有表示。
C和C ++的意识形态是这样的,每个编译单元必须是自足的,以便进行编译,也就是说,必须在编译单元中定义所有必需的编译时实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.