Различия между структурами в C и C ++

Я пытаюсь преобразовать структуру 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.

Это статья MSDN для C2061.

Инициализатор может быть заключен в круглые скобки. Чтобы избежать этой проблемы, заключите декларатор в круглые скобки или сделайте его typedef.

Эта ошибка также может быть вызвана тем, что компилятор обнаруживает выражение в качестве аргумента шаблона класса; используйте typename, чтобы сообщить компилятору, что это тип.

Изменение KEY_STATE на typedef struct все еще вызывает эту ошибку и на самом деле вызывает гораздо больше. В слишком многих скобках нет свободных скобок или чего-то другого, это еще одна вещь, о которой говорится в статье.

Ответы на вопрос(5)

Ваш ответ на вопрос