Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 из-за этой ручной настройки.