C++ 構造体を C に変換しようとしていますが、「宣言されていない識別子」が表示され続けますか? C++ には、構造体を参照するための別の構文がありますか?
struct KEY_STATE
{
bool kSHIFT; //if the shift key is pressed
bool kCAPSLOCK; //if the caps lock key is pressed down
bool kCTRL; //if the control key is pressed down
bool kALT; //if the alt key is pressed down
};
別の構造内でタイプ KEY_STATE の変数を使用しています。
typedef struct _DEVICE_EXTENSION
{
WDFDEVICE WdfDevice;
KEY_STATE kState;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
エラー C2061が発生し ます: 構文エラー: 識別子 'KEY_STATE'
...行KEY_STATE kState; それが違いを生む場合、私はWDKコンパイラで構築しています。もちろん、これはヘッダーファイルにあります。C++ WDM ドライバーを WDF と C に移植しています。
初期化子は括弧で囲むことができます。この問題を回避するには、宣言子を括弧で囲むか、typedef にします。
このエラーは、コンパイラが式をクラス テンプレート引数として検出した場合にも発生する可能性があります。typename を使用して、それが型であることをコンパイラに伝えます。
KEY_STATE を typedef 構造体に変更しても、このエラーが発生し、実際にはさらに多くのエラーが発生します。自由な括弧や、括弧が多すぎるものはありません。これは、この記事が示唆するもう 1 つのことです。