C++ 外部枚举

标签 c++ enums extern

我已经找到了: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

从表面上看,您正试图将游戏的表示形式折叠到它们名称的定义中。这可能效果不太好,尤其是它们可能会改变外观(您可能希望让 PACCO 之间交替,因为例子)。实际代码很可能会讨论这些名称,并且您会在多个地方使用它们。只需使用 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/

相关文章:

c++ - 获取 std::string 反向拷贝的有效方法

enums - 如何在 UML 中为嵌套的枚举或表建模?

enums - Rust proc_macro_derive(带有syn crate)生成用于匹配的枚举变量

c++ - 我想删除给定字母的出现

c++ - 返回指针后删除堆

c++ - 对于具有相同类型成员但定义顺序不同的结构体,复制列表初始化赋值具有不同的结果

c - 在 C 中使用函数指针访问外部函数

c++ - C++ 'new' 关键字和 C

c++ - 外部 "C"错误预期 '='、 ','、 ';'、 'asm' 或 '__attribute__' 之前的 'int'

c++ - 使用 gcc 构建 C++ 的推荐 -W 标志