Ошибка: xkeycheck.h (179): предупреждение C4005: «char16_t»: переопределение макроса »|Фатальная ошибка C1189 - PullRequest
0 голосов
/ 04 июня 2018

Мой вопрос похож на этот: Ошибка: "предупреждение C4005: 'SWIGTEMPLATEDISAMBIGUATOR': переопределение макроса"

У меня есть похожий код предупреждения (меняется на 'char16_t'):

xkeycheck.h (179): предупреждение C4005: 'char16_t': переопределение макроса

Затем:

xkeycheck.h (179): примечание: argomenti della riga di comando: ведение предшествующего определения 'char16_t'

(Перевод: "примечание: фрагменты командной строки: посмотрите на предыдущее определение" char16_t ')

Но он продолжает давать следующее:

xkeycheck.h (250): фатальная ошибка C1189: #error: Стандартная библиотека C ++ запрещает макросирование ключевых слов. Включите предупреждение C4005, чтобы найти запрещенный макрос.

Компилятор: Visual Studio 2015

1 Ответ

0 голосов
/ 05 июня 2018

Поддержка char16_t и char32_t была добавлена ​​в Visual Studio 2015. Это означает, что вы больше не можете создавать символы с этими именами, но опять же они вам больше не нужны, так как они уже существуют.

Решение состоит в том, чтобы удалить создание typedef или макроса или, по крайней мере, защитить его, когда defined(MSC_VER) && _MSC_VER < 1900.

См. MSDN :

char_16_t и char32_t Вы больше не можете использовать char16_t или char32_t в качестве псевдонимов в typedef, потому что эти типы теперь обрабатываются как встроенные.Обычно пользователи и авторы библиотек определяли char16_t и char32_t как псевдонимы uint16_t и uint32_t соответственно.

Чтобы обновить код, удалите объявления typedef и переименуйте любые другие идентификаторы, которые конфликтуют с этими именами.

...