3

我有文件 Ac 、 Bc 和 Bh 。在 Ac 中有一个

enum CMD{
    FIRST,
    SECOND,
    THIRD,
};

后来在那个文件中有

bool function(...){
//...
enum CMD data_type = FIRST;
//...
}

在文件 Bc 我需要使用

if (data_type == FIRST){...}

我试图在 Bh 中包含以下内容:

extern enum CMD data_type;

并在 Ac 和 Bc 中包含 #include "Bh" 。所有文件都在项目的propper文件夹中。但没有雪茄 :( Bc 中的行给出了这个:

20: identifier "FROM_SMS" is undefined
70: incomplete type is not allowed

我如何使这项工作。Ac 文件是由其他人编写的,我正在使用 Bc 修改代码。原始代码是一团糟,我想尽可能少地摆弄它:) 架构,即STM32,我正在使用uVision 3 IDE。

谢谢

4

2 回答 2

8

枚举是一种类型,你应该把它放在 .h 中。

extern关键字用于变量。

编辑:对不起,我读错了你的代码。

这里的问题是您将尝试使用枚举而不定义它。认为当编译器编译某些东西时,它会分别获取每个 .c 文件,然后将包含的内容“复制”到 c 文件中。

所以在这里你会得到包含 bh 的 bc 但由于你的类型的声明是在 ac 中,编译器无法知道它,因此在尝试编译 bc 时会抛出错误

要解决它,只需在 bh 的顶部声明您的类型并将其包含在两个文件中,或者创建一个“myenum.h”文件,将其包含在需要它的 .h / .c 文件中。

于 2013-08-01T06:55:17.897 回答
0

enum只是另一种类型define。它仅适用于当前翻译单元。

于 2013-08-01T06:59:46.827 回答