繁体   English   中英

C ++外部枚举

[英]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

从它的外观来看,你试图将游戏的表现形式折叠成他们名字的定义。 这可能效果不好,特别是因为它们可能会改变外观(例如,您可能希望PACCO之间交替)。 很可能实际的代码会谈论这些名称,你会在多个地方。 只需使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM