0

ブーストを使用してシリアルライブラリを作成しており、列挙型があります:

enum parity_t { PARITY_NONE, PARITY_ODD, PARITY_EVEN };

次のようなエラーが表示されます。

エラー 1 エラー C2059: 構文エラー: '('

問題が何であるかを理解できませんでした。それから私の友人と私は試しました:

void PARITY_NONE();

そして、次のエラーが発生しました。

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

エラー 2 エラー C2143: 構文エラー: ';' がありません 「定数」の前

エラー 3 エラー C2182: 'WORD': 型 'void' の不正な使用

エラー 4 エラー C2059: 構文エラー: ')'

私はboost asioを含めていますが、これにはWindowsシリアルAPIがどこかに含まれていると思います。これは Windows でのみ発生します。回避策として、列挙名を変更しました。ただし、インターネット上でこの問題に関連するものを見つけることができません。誰かがこれを理解するのを手伝ってくれますか?

4

4 に答える 4

5

winbase.h で定義されています。

//
// Settable Stop and Parity bits.
//

#define STOPBITS_10       ((WORD)0x0001)
#define STOPBITS_15       ((WORD)0x0002)
#define STOPBITS_20       ((WORD)0x0004)
#define PARITY_NONE       ((WORD)0x0100)
#define PARITY_ODD        ((WORD)0x0200)
#define PARITY_EVEN       ((WORD)0x0400)
#define PARITY_MARK       ((WORD)0x0800)
#define PARITY_SPACE      ((WORD)0x1000)

#undef列挙型を作成する前にそれらを。

于 2011-03-22T17:30:26.767 に答える
2

で定義されていWinBase.hます:

//
// Settable Stop and Parity bits.
//

#define STOPBITS_10       ((WORD)0x0001)
#define STOPBITS_15       ((WORD)0x0002)
#define STOPBITS_20       ((WORD)0x0004)
#define PARITY_NONE       ((WORD)0x0100)
#define PARITY_ODD        ((WORD)0x0200)
#define PARITY_EVEN       ((WORD)0x0400)
#define PARITY_MARK       ((WORD)0x0800)
#define PARITY_SPACE      ((WORD)0x1000)

配列などのインデックス付けにその列挙型を使用しない場合、列挙型と同じように機能するため、それらの値を使用することもできます。

于 2011-03-22T17:31:27.733 に答える
1

ここで発生する可能性が最も高いのは、 の値の 1 つenumが既に#define別の値になっていることです。その値の拡張によりenum、コンパイラ エラーが発生します。これを確認するには、コードを次のように変更します

#ifdef PARITY_NONE
#error Duplicate definition
#endif

のすべての値に対して繰り返しますenum

定義がどこから来ているかを発見するのは、少しトリッキーです。運が良ければ、次のように動作します

  • 列挙型定義をコメントアウトします
  • メソッドPARITY_NONEを入力する
  • 右クリックして「定義へ移動」を選択します
于 2011-03-22T17:28:52.287 に答える