Индексатор Eclipse не может разрешить shared_ptr

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

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

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

5 ответов

Решение

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

Я столкнулся с этой проблемой под 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) обнаруживается в настройках встроенного компилятора CDT GCC.

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

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

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

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

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

Щелкните правой кнопкой мыши Project-> Properties-> C / C++ General-> препроцессор, включите пути, макросы и т. Д. -> перейдите на вкладку "Providers" -> CDT GCC Настройки встроенного компилятора

Снимите флажок "Использовать общий провайдер, совместно используемый проектами"

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

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

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

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

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

Я испытал ту же проблему. Я добавил 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 и правильно его индексирует.

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

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

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

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

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

Другие вопросы по тегам