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

Они не должны быть! Параметр по умолчанию может быть любым выражением в рамках определенных ограничений. Это оценено каждый раз, когда функция вызвана.

15
задан Dale 29 September 2009 в 14:14
поделиться

5 ответов

В C имя типа struct KEY_STATE .

Итак, вы должны объявить вторая структура как

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

Если вы не хотите постоянно писать struct , вы можете использовать typedef declare KEY_STATE , аналогичный DEVICE_EXTENSION :

typedef struct _KEY_STATE
{
    /* ... */
} KEY_STATE;
30
ответ дан 1 December 2019 в 00:01
поделиться

Типа bool в C до C99 не существует.

Кроме того, не существует типа с именем KEY_STATE , когда вы выполняете struct KEY_STATE .

Попробуйте вместо этого:

typedef struct _KEY_STATE 
{
    unsigned kSHIFT : 1; //if the shift key is pressed 
    unsigned kCAPSLOCK : 1; //if the caps lock key is pressed down
    unsigned kCTRL : 1; //if the control key is pressed down
    unsigned kALT : 1; //if the alt key is pressed down
} KEY_STATE;
16
ответ дан 1 December 2019 в 00:01
поделиться

Вам необходимо обратиться к KEY_STATE с помощью struct KEY_STATE . В C ++ вы можете оставить структуру struct вне поля C.

Другое решение - создать псевдоним типа:

typedef struct KEY_STATE KEY_STATE

Теперь KEY_STATE означает то же самое, что и struct KEY_STATE

6
ответ дан 1 December 2019 в 00:01
поделиться

Вы можете / должны определить структуру типа, чтобы не было необходимости использовать ключевое слово struct каждый раз, когда вы будете объявлять переменную этого типа.

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

Теперь вы можете:

KEY_STATE kState;

или (как в вашем примере):

struct KEY_STATE kState;
5
ответ дан 1 December 2019 в 00:01
поделиться

Вы должны указать структурную переменную с помощью ключевого слова 'struct':

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

Когда вы используете DEVICE_EXTENSION, вам не нужно делать используйте 'struct', потому что вы делаете определение структуры и typedef в одном составном операторе. Таким образом, вы можете сделать то же самое для KEY_STATE, если хотите использовать его в аналогичной манере:

typedef struct _KEY_STATE_t
{
    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;
4
ответ дан 1 December 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: