Почему включение <windows .h> приводит к «error: Ожидается») перед цифрой c константа в несвязанной инструкции #define - PullRequest
0 голосов
/ 17 февраля 2020

Кто-нибудь может объяснить, что здесь происходит не так? Когда я пытаюсь скомпилировать qtermwidget в MinGW-w64 и добавить #include <windows.h> в исходный файл BlockArray. cpp, я получить следующую ошибку компиляции, относящуюся к #define BlockSize (1 << 12) в BlockArray.h :

In file included from E:/git/qtermwidget/lib/BlockArray.cpp:27: 
E:/git/qtermwidget/lib/BlockArray.h:30:20: error: expected ')' before numeric constant
30 | #define BlockSize (1 << 12)
   |                   ~^

Почему добавление заголовка windows .h вызывает это ошибка? Предполагая, что я действительно хочу добавить этот заголовок, могу ли я как-то изменить #define BlockSize (1 << 12) в BlockArray.h , чтобы не нарушать компиляцию?

1 Ответ

1 голос
/ 18 февраля 2020

Большое спасибо Сэму и busybee, я могу подтвердить, что существует конфликт имен в winnt.h , который вводится через windows .h . Однако это typedef, использующий имя BlockSize, а не другое определение препроцессора:

typedef struct _TAPE_SET_MEDIA_PARAMETERS {
    ULONG BlockSize;
} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;

Изменение #define BlockSize (1 << 12) в BlockArray.h на новое имя, например, #define LXQT_BlockSize (1 << 12) разрешает конфликт.

...