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

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

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

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

Любая идея, что ломает индексатор?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

введите описание изображения здесь

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

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

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

Ответ 3

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

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

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

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

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

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

Восстановить индекс.

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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