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" を含めました。すべてのファイルは、プロジェクトの適切なフォルダーにあります。しかし、葉巻はありません:( Bcの行はこれを示しています:

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

どうすればこれを機能させることができますか。Ac ファイルは他の誰かによって書かれており、コードを Bc で変更しています。元のコードはごちゃごちゃしていて、できるだけいじりたいと思っています :) アーキテクチャ、つまり STM32 で、uVision 3 IDE を使用しています。

ありがとうございました

4

2 に答える 2

8

An enum is a type, you should put in in the .h.

extern keyword is for variables.

Edit: Sorry, I had badly read your code.

Here the problem is that you will try to use the enum without having it defined. Think that when a compiler compiles something, it takes every .c file separately, and then "copies" the content of the include into the c file.

So here you will have b.c which includes b.h but since the declaration of your type is in a.c, the compiler has no way of knowing it, hence throwing an error when trying to compile b.c.

To solve it, just declare your type at the top of b.h and include it in both files, or create a "myenum.h" file which you include in the .h / .c files that require it.

于 2013-08-01T06:55:17.897 に答える
0

enumの別のタイプですdefine。現在の翻訳単位でのみ機能します。

于 2013-08-01T06:59:46.827 に答える