Я настроил проект C ++ 11 в Eclipse CDT для использования gcc-4.7. Это не компилятор по умолчанию в моей системе, который не поддерживает C ++ 11. Чтобы компиляция работала, мне нужно пройти флаг -std=c++11
а также включить следующий путь заголовка: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2
Всякий раз, когда я использую C ++ 11 контейнерные типы, такие как std::unordered_set
или же std::unordered_map
Индексатор CDT жалуется: Symbol unordered_set could not be resolved
, Как я могу сказать индексатору правильно разрешить эти символы?
Вот как я настроил свой индексатор:
Насколько я понимаю настройки, индексатор должен использовать настройки компилятора из текущей активной конфигурации сборки. Компиляция работает нормально, так почему же нет индексации?
Как описано в этом сообщении на форуме:
http://www.eclipse.org/forums/index.php/mv/msg/282618/
__GXX_EXPERIMENTAL_CXX0X__
в «Имя» иНастройка **__GXX_EXPERIMENTAL_CXX0X__**
не помогает в моем случае (июль 2014, Eclipse Kepler 20130919, Ubuntu 12.04).
Чтобы исправить подсветку синтаксиса C ++ 11, перейдите по ссылке:
Свойства проекта -> Общие сведения о C / C ++ -> Пути и символы -> Символы -> GNU C ++
и перезаписать символ (т.е. добавить новый символ):
__cplusplus
со значением
201103L
ОБНОВЛЕНО: Если вы используете более новую версию Eclispe (по состоянию на 2016 год) и по-прежнему сталкиваетесь с той же проблемой, попробуйте значение value (как указано в jose.diego):
201402L
Убедитесь, что индексатор включен в настройках проекта (C / C ++ общий -> индексатор)
Потом переиндексация (Проект -> Индекс C / C ++ -> Перестроить)
если проблема все еще сохраняется, переиндексируйте еще раз. Это должно работать сейчас.
Я решил эту проблему недавно, после удачного поиска в Google.
Нажмите на свой проект и щелкните правой кнопкой мыши -> Свойства
Выбрать «C / C ++ General -> Процессор включает пути, макросы и т.д … »
Выбрать вкладка «Провайдеры»
Отмените все Кроме «Записи настроек пользователя CDT» и «Настройки встроенного компилятора CDT GCC»
Нажмите на «Настройки встроенного компилятора CDT GCC»
Отмените «Использование глобального провайдера, совместно используемого проектами»
редактировать поле внизу с надписью «Команда для получения спецификации компилятора»
Вставить в команду -std = c ++ 11, так что это выглядит примерно так:
${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}"
Нажмите Применить и хорошо.
Это сработало для меня. Вам, вероятно, нужно переиндексировать проект.
Или перейдите к:
Сборка C / C ++ -> Параметры обнаружения -> Компилятор GCC C ++
добавьте свои флаги в аргументы вызова компилятора. как -std = c ++ 11 -m32
Очистить обнаруженные записи сейчас: нажмите Очистить
перестроить проект
После этого ВСЕ символы будут обновлены с правильными значениями, и индексатор должен работать как задумано
Обходной путь для меня с проектом, использующим внешний компоновщик, заключался в определении символа:
__cplusplus
со значением:
201403
в проекте: Пути и символы -> Символы / GNU C ++.
Это сработало в Eclipse Kepler CDT Version: 8.3.0.201402142303.
Увидеть это руководство:
Следующие работы в Eclipse
C/C++
Oxygen
.2 с gcc-5.5.0
Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17
Не бери ничего в Language standard
выпадающий список.