Индексатор Eclipse CDT не знает контейнеры C ++ 11

Я настроил проект 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, Как я могу сказать индексатору правильно разрешить эти символы?

Вот как я настроил свой индексатор:

введите описание изображения здесь

Насколько я понимаю настройки, индексатор должен использовать настройки компилятора из текущей активной конфигурации сборки. Компиляция работает нормально, так почему же нет индексации?

44

Решение

Как описано в этом сообщении на форуме:

http://www.eclipse.org/forums/index.php/mv/msg/282618/

  • щелкните правой кнопкой мыши по проекту и перейдите в «Свойства» C / C ++ Общие -> Пути
    и символы -> символы -> GNU C ++.
  • Нажмите «Добавить …» и вставьте __GXX_EXPERIMENTAL_CXX0X__ в «Имя» и
    оставьте поле «Значение» пустым. Нажмите Применить, делайте все, что от вас требуется, затем
    ударил ОК.
35

Другие решения

Настройка **__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 ++ -> Перестроить)

если проблема все еще сохраняется, переиндексируйте еще раз. Это должно работать сейчас.

78

Я решил эту проблему недавно, после удачного поиска в Google.

Нажмите на свой проект и щелкните правой кнопкой мыши -> Свойства

Выбрать «C / C ++ General -> Процессор включает пути, макросы и т.д … »

Выбрать вкладка «Провайдеры»

Отмените все Кроме «Записи настроек пользователя CDT» и «Настройки встроенного компилятора CDT GCC»

Нажмите на «Настройки встроенного компилятора CDT GCC»

Отмените «Использование глобального провайдера, совместно используемого проектами»

редактировать поле внизу с надписью «Команда для получения спецификации компилятора»

Вставить в команду -std = c ++ 11, так что это выглядит примерно так:

${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}"

Нажмите Применить и хорошо.

введите описание изображения здесь

Это сработало для меня. Вам, вероятно, нужно переиндексировать проект.

48

Или перейдите к:

  • Сборка C / C ++ -> Параметры обнаружения -> Компилятор GCC C ++

  • добавьте свои флаги в аргументы вызова компилятора. как -std = c ++ 11 -m32

  • Очистить обнаруженные записи сейчас: нажмите Очистить

  • перестроить проект

После этого ВСЕ символы будут обновлены с правильными значениями, и индексатор должен работать как задумано

9

Обходной путь для меня с проектом, использующим внешний компоновщик, заключался в определении символа:

__cplusplus

со значением:

201403

в проекте: Пути и символы -> Символы / GNU C ++.

Это сработало в Eclipse Kepler CDT Version: 8.3.0.201402142303.

5

Увидеть это руководство:

  1. Сборка C / C ++ -> Настройки -> Компилятор GCC C ++ -> Диалект
  2. Выберите «ISO C ++ 11 (-std = c ++ 0x)» в «стандарте языка»Язык и диалект
  3. Применить и ОК
  4. Перестрой проект и все работает 🙂
2

Следующие работы в 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 выпадающий список.

1
По вопросам рекламы [email protected]