Eclipse CDT indexer не знает контейнеры С++ 11
Я сконфигурировал проект С++ 11 в Eclipse CDT для использования gcc-4.7. Это не компилятор по умолчанию в моей системе, который не поддерживает С++ 11. Чтобы компиляция работала, мне нужно передать флаг -std=c++11
, а также включить следующий путь заголовка: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2
Когда я использую типы контейнеров С++ 11, такие как std::unordered_set
или std::unordered_map
, индексатор CDT жалуется: Symbol unordered_set could not be resolved
. Как я могу сказать, что индексатор правильно разрешает эти символы?
Вот как я настроил свой индекс:
![enter image description here]()
Насколько я понимаю настройки, индекеры должны использовать настройки компилятора из текущей активной конфигурации сборки. Компиляция работает отлично, так почему же не индексирование тоже?
Ответы
Ответ 1
Как описано в этом форуме сообщение:
http://www.eclipse.org/forums/index.php/mv/msg/282618/
- щелкните правой кнопкой мыши проект и перейдите в раздел "Свойства". C/С++. Общие → Контуры.
и символы → Символы → GNU С++.
- Нажмите "Добавить..." и вставьте
__GXX_EXPERIMENTAL_CXX0X__
в "Имя" и
оставьте поле "Значение" пустым. Нажмите "Применить", сделайте все, что вы попросите, затем
нажмите ОК.
Ответ 2
Настройка **__GXX_EXPERIMENTAL_CXX0X__**
не помогает в моем случае (июль 2014, Eclipse Kepler 20130919, Ubuntu 12.04).
Чтобы исправить подсветку синтаксиса С++ 11, выполните следующие действия:
Свойства проекта → C/С++ Общие → Контуры и символы → Символы → GNU С++
и перезаписать символ (т.е. добавить новый символ):
__cplusplus
со значением
201103L
ОБНОВЛЕНО: Если вы используете более новую версию Eclispe (начиная с 2016 года) и все еще испытываете ту же проблему, попробуйте значение (как указано jose.diego):
201402L
Убедитесь, что индексирование включено в настройках проекта (C/С++ general → Indexer)
Затем reindex (Project → C/С++ Index → Rebuild)
если проблема все еще сохраняется повторно. Теперь он должен работать.
Ответ 3
Я решил эту проблему недавно после того, как повезло в Google.
Нажмите на свой проект и щелкните правой кнопкой мыши- > Свойства
Выбрать "C/С++ Общие → Процессор Включить пути, макросы и т.д."
Выберите вкладку "Провайдеры"
Снимите выделение все кроме "Записи пользовательских настроек CDT" и "Встроенные настройки компилятора CDT GCC"
Нажмите "Параметры встроенного компилятора CDT GCC"
Отменить выбор "Использовать глобальный поставщик, совместно используемый между проектами"
Изменить поле внизу с надписью "Команда для получения спецификаций компилятора"
Вставить в команду -std = С++ 11, чтобы она выглядела примерно так:
${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}"
Нажмите Apply и Okay.
![enter image description here]()
Это сработало для меня. Вероятно, вам нужно повторно проиндексировать проект.
Ответ 4
Или перейдите к:
-
C/С++ Build- > Параметры обнаружения- > Компилятор CCC С++
-
добавьте свои флаги в аргументы вызова компилятора. например -std = С++ 11 -m32
-
Очистить обнаруженные записи сейчас: нажмите "Очистить"
-
перестроить проект
После этого ВСЕ символы будут обновляться с правильными значениями, и индексщик должен работать как предполагалось
Ответ 5
Обходной путь для меня, с проектом, который использует внешний строитель, заключался в определении символа:
__ cplusplus
со значением:
201403
в проекте: Пути и Символы → Символы /GNU С++.
Это работало в eclipse Kepler CDT Version: 8.3.0.201402142303.
Ответ 6
См. это руководство:
- C/С++ Build- > Settings- > GCC С++ Compiler- > Dialect
- Выберите "ISO С++ 11 (-std = С++ 0x)" в "стандарте языка"
![Language and dialect]()
- Применить и ОК
- Перестроить проект, и он работает:)
Ответ 7
Следующие работы в 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
.
Ответ 8
Следующая конфигурация помогает мне решить проблему, указанную в исходном вопросе.
Окружающая среда: Eclipse (Oxygen.3a Release (4.7.3a)), Cygwin64. Если у вас другая версия Cygwin, вы можете найти похожие каталоги следующим образом.
Шаг 1: Убедитесь, что у вас есть следующие два каталога:
C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++
Если вы не видите две вышеупомянутые директории, пожалуйста, запустите программу установки Cygwin и установите gcc-core, gcc-g++ и libgcc1.
Шаг 2: Скопируйте каталог C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
в C:\cygwin64\usr
если вы не видите выше двух каталогов include.
Шаг 3: Перейдите в Project Property-> C/C++ General-> Paths and Symbols. Убедитесь, что вы видите следующие два пути в списке
C:\cygwin64\usr\include
C:\cygwin64\usr\include\c++
Шаг 4: Property-> C/C++ Сборка/Настройки/Выбор Cygwin PE Parser
Шаг 5: Property-> C/C++ Редактор сборки/цепочки инструментов Выберите Cygwin GCC
Шаг 6: Property-> C/C++ General/Indexer Выберите Включить индексатор
Шаг 7: Project-> C/C++ Index-> Rebuild
Теперь ваше затмение должно быть в состоянии увидеть C++ 11 типов.
Ответ 9
У меня такая же проблема. На самом деле, мне любопытно или даже злится, почему Eclipse по умолчанию не поддерживает С++ 11/14? Почему нам нужно настроить эти шаги? Я собираюсь обратиться к Visual Studio Code из-за этой ручной настройки.