Индексатор 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 из-за таких строк в заголовке
#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 -> Команда для получения спецификаций компилятора.
Не забудьте очистить и перестроить свой проект / индекс.