Индексатор Eclipse не может разрешить shared_ptr - PullRequest
35 голосов
/ 29 ноября 2011

После исследования этого в Интернете я не смог получить индексатор Eclipse для разрешения «shared_ptr» из дополнений C ++ 0x, которые поставляются с GCC 4.4.4. Я удостоверился, что создал свой проект с правильными включениями для Eclipse, поэтому он определенно просматривает папки 4.4.4 include.

Программа компилируется и работает просто отлично. Для доступа к shared_ptr я использую "#include ".

Есть идеи, что нарушает работу индексатора?

Ответы [ 5 ]

50 голосов
/ 29 ноября 2011

Вам необходимо установить символ препроцессора ' __ GXX_EXPERIMENTAL_CXX0X __ ' для проекта eclipse.g ++ автоматически добавляет это, когда вы используете '-std = c ++ 0x', но eclipse не знает об этом, поэтому обрабатывает эти разделы соответствующих заголовков как отключенные.

9 голосов
/ 04 декабря 2015

Я столкнулся с этой проблемой в Windows с Eclipse 4.5.1 (Mars.1) и Cygwin 2.3.0 (GCC 4.9.3).

Индексатору не удалось найти shared_ptr из-за таких строк взаголовок .Макрос __cplusplus оценивает что-то отличное от C ++ 11 (он же 201103), поэтому вместо shared_ptr.h включается более старый auto_ptr.h.Зачем?На приведенном ниже снимке экрана свойств проекта показано, что C ++ 98 (199711) обнаруживается в настройках встроенного компилятора GCC CDT.

#if __cplusplus >= 201103L
#  include <bits/shared_ptr.h>
#else
#  include <backward/auto_ptr.h>
#endif

enter image description here

Существует два возможных решения заставить Eclipse использовать C ++:

  • На том же экране препроцессора «Включить пути» выделите верхнюю часть области «Настройка записей».Разверните записи настроек пользователя CDT.Добавьте новый макрос препроцессора для __cplusplus = 201103L.Сделайте это как для версии выпуска, так и для конфигурации отладки.Затем перестройте индекс.

  • Если вы хотите по умолчанию использовать параметры встроенного компилятора CDT GCC для использования 201103 для всех проектов, то отредактируйте файл language.settings.xml (в Windows этоэто c: \ Users \ deanhill \ workspace \ .metadata \ .plugins \ org.eclipse.cdt.core \ language.settings.xml).Установите __cplusplus = 201103L.Перезапустите Eclipse и перестройте индекс.

4 голосов
/ 26 января 2017

Несмотря на то, что я опоздал на игру, это то, что сработало для меня:

Щелкните правой кнопкой мыши Project-> Properties-> C / C ++ General-> Preprocessor Include Paths, Macros и т. Д.> Перейдите на вкладку «Провайдеры» -> Настройки встроенного компилятора CDT GCC

Снимите флажок «Использовать глобальный поставщик, общий для проектов» *

Добавить -std = c ++ 0x

Это будет выглядеть примерно так:

${COMMAND} ${FLAGS} -E -P -v -dD -std=c++0x "${INPUTS}"

Перестроить индекс.

Использование Debian Jessie + Eclipse Kepler Build id: 20140224-0627

2 голосов
/ 20 апреля 2015

У меня возникла такая же проблема. Я добавил GXX_EXPERIMENTAL_CXX0X , а также -std=c++11 к параметрам компилятора в рабочей области. Однако это не решило мою проблему.

Я пропустил еще один шаг: Щелкните правой кнопкой мыши на Project-> Properties-> C / C ++ Build-> Settings-> Cross G ++ Compiler-> Miscellaneous-> Other flags Я изменился -c -fmessage-length=0 в -c -fmessage-length=0 -std=c++11

Теперь Eclipse видит std :: shared_ptr и правильно его индексирует.

1 голос
/ 13 сентября 2018

Для меня это сработало, установив other dialect flags = -std=c++11 в:

Настройки -> Сборка C ++ -> Настройки -> Компилятор GCC C ++ -> Диалект ,

, а также добавление -std=c++11 под:

Предпочтения -> Общие положения C ++ -> Путь включения препроцессора -> Поставщики -> Параметры встроенного компилятора CDT GCC -> Команда для получения спецификаций компилятора .

Не забудьте очистить и перестроить ваш проект / индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...