Diferencias entre estructura en C y C ++

¿Estoy tratando de convertir una estructura C ++ a C pero sigo obteniendo un "identificador no declarado"? ¿Tiene C ++ una sintaxis diferente para referirse a estructuras?

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
};

Estoy usando una variable de tipo KEY_STATE dentro de otra estructura:

typedef struct _DEVICE_EXTENSION
{
    WDFDEVICE WdfDevice;
    KEY_STATE kState;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

resultados enerror C2061: error de sintaxis: identificador 'KEY_STATE'

...en la líneaKEY_STATE kState; Estoy construyendo con el compilador WDK si eso hace alguna diferencia. Esto está en un archivo de cabecera, por supuesto. Estoy portando el controlador C ++ WDM a WDF y C.

Este es el artículo de MSDN para C2061.

Un inicializador puede estar entre paréntesis. Para evitar este problema, incluya el declarador entre paréntesis o conviértalo en un typedef.

Este error también podría ser causado cuando el compilador detecta una expresión como un argumento de plantilla de clase; use typename para decirle al compilador que es un tipo.

Cambiar KEY_STATE a typedef struct todavía causa este error y en realidad causa mucho más. No hay paréntesis libres o cosas en muchos paréntesis, eso es lo otro que sugiere el artículo.

Respuestas a la pregunta(5)

Su respuesta a la pregunta