2015-07-31 8 views
2

В настоящее время я перемещаю несколько файлов классов из исходной среды Visual Studio в Qt Creator (версия 3.4.2).Qt Creator IDE кажется ложной маркировкой reinterpret_cast <:: GlobalType> как недопустимый

Я сделал несколько изменений, чтобы удовлетворить различия в компиляторе (в MinGW). Одна вещь, которая меня озадачивает, заключается в том, что среда IDE сообщает о конкретной ошибке (красная подчеркивание), но все еще компилируется в порядке.

Я уверен, что проблема изолирована от использования reinterpret_cast<T>, где T - это глобальное пространство имен.

Например, следующая строка будет отображаться как ошибочный в IDE, но по-прежнему будет компилировать:

::GetWindowThreadProcessId(window, reinterpret_cast<::LPDWORD>(&processId)); 

В подсказке говорится:

ожидается ';' получил «:»

Если изменить код, чтобы удалить :: из LPDWORD подсветка синтаксиса исчезает. Это нормально в среде IDE:

::GetWindowThreadProcessId(window, reinterpret_cast<LPDWORD>(&processId)); 

Я подозреваю, что это ошибка в среде IDE. Это безопасное предположение?

Я не планирую менять стиль кода для использования глобального пространства имен.

+5

Я не знаю точно, но, вероятно, ошибка вызвана орграфом '<:'. Сделайте пробел между '<' и '::' и проверьте, помогает ли он. Кроме того, без этого места код не будет компилироваться. Подробнее о каталогах здесь https://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C – lisyarus

+0

@lisyarus Добавление пространства, казалось, помогло с жалобой IDE, и оно компилируется – camelCase

+2

Qt Creator по умолчанию использует собственный синтаксический анализатор C++. Этот синтаксический анализатор не является полным, совместимым со стандартами парсером C++ по необходимости. Вместо этого вы можете попробовать экспериментальную модель кода на основе LLVM, она должна принимать все, что LLVM будет. –

ответ

0

Благодаря комментарию lisyarus я смог найти, что на самом деле это ошибка в QT Creator. Уже есть сообщение об ошибке here.

Как я уже говорил в этом вопросе, ошибка не мешает вам компилировать код. Вы можете, если хотите, добавить пробел между < и ::.

 Смежные вопросы

  • Нет связанных вопросов^_^