0

MFC プロジェクトをコンパイルしようとしているときに発生するこのエラーに少し当惑しています。簡単にするために、次のようなものを列挙したいと思います。

enum Cars
{
Audi,
Bmw,
Ford
};

これは正常に動作しますが、次のような「車」を定義すると、コンパイル中にエラーが発生します。

#define Audi 100
...
...
enum Cars
{
    Audi,
    BMW,
    Ford
}; 

私が得たエラーは、これを書いたヘッダーとソースファイルの両方にあります

エラー C2143: 構文エラー: 'constant' の前に '}' がありません

エラー C2143: 構文エラー: ';' がありません 前 '}'

エラー C2059: 構文エラー: '}'

両方の部分が別々にコンパイルされるため、構文エラーが発生する理由がわかりません。enum 定義で Audi =100 を簡単に定義できることはわかっていますが、実際のプロジェクトではそれができません。

4

2 に答える 2

2

定義を行うと、そのテキストの検索と置換を行ってからコンパイルが行われるようになるため、例では Audi が 100 になり、列挙型は次のようになります

enum Cars
{
    100,
    BMW,
    Ford
}; 

100 は有効な列挙名ではないため、このエラーが表示されます。

オーディオを値100にしたい場合は、次のことができます

enum Cars
{
    Audi = 100,
    BMW,
    Ford
}; 

ただし、BMW と Ford の値はそれぞれ 101,102 に設定されているため、これを行うときは注意してください。これがヘッダー ファイルにある場合は、完全に再コンパイルする必要があります。

于 2013-08-12T07:48:53.977 に答える
-2

私はマクロを残し、C++11 の次の機能を使用することを好みます。enum class Cars { アウディ = 100、BMW、フォード };

于 2013-08-12T08:04:51.363 に答える