Как включить C++11 в Eclipse Juno/Kepler / Luna CDT?


EDIT: оказывается, это действительно не относится к Eclipse Kepler. Я должен был использовать тот же процесс для Eclipse Juno. Проблема заключалась в том, что, похоже, в других сообщениях отсутствуют шаги, отвечающие на этот же вопрос.

Я использую Eclipse Kepler для C++, и я пытаюсь использовать C++11 и получать ошибки. При компиляции я получаю ошибку

ошибка: циклы на основе диапазона не допускаются в режиме C++98

я следовал инструкциям из пост

Eclipse CDT C++11/C++0x поддержка

и решение, данное для Eclipse Juno, не работает.

различные комментарии предложили перезапустить eclipse и очистки и восстановления. Это ничего не изменило.

8 86

8 ответов:

есть две вещи, которые вы должны сделать, сначала вам нужно настроить компилятор, а затем вам нужно настроить языковой процессор CDT. Поскольку вы не упомянули, какой компилятор вы используете, я предполагаю, что это GCC, но шаги будут аналогичны для других компиляторов. (Обратите внимание, что вам нужен компилятор, который поддерживает C++11, конечно.)

настройка компилятора довольно проста:

  1. щелкните правой кнопкой мыши свой проект и выберите Свойства
  2. Под Сборкой C / C++ нажмите кнопку Настройки
  3. в разделе компилятор GCC C++ выберите разное
  4. в поле другие флаги добавьте "- std=c++11 " в список маркеров.
  5. Нажмите кнопку Применить и ОК

на этом этапе вы должны быть в состоянии перестроить свой проект и заставить его работать. Но CDT все еще может показывать ошибки для C++11 включает. Вот как вы можете решить эту проблему:

  1. щелкните правой кнопкой мыши свой проект и выберите Свойства
  2. в разделе C/C++ общие нажмите "Препроцессор Включает Пути, Макросы"
  3. выберите вкладку поставщикам
  4. там должен быть элемент в списке, который говорит что-то вроде "GCC встроенный в настройках компилятора". Выберите эту запись.
  5. снимите флажок "Использовать глобальный поставщик..."вариант
  6. под списком есть поле, в котором говорится: "команда для получения спецификаций компилятора."Добавить" - std=c++0x " к этому.
  7. переместите поставщик" GCC Built in Compiler Settings "в верхнюю часть списка, используя 'Move Up' кнопка справа.
  8. Нажмите кнопку Применить, а затем ОК.
  9. вернитесь в рабочее пространство Eclipse, выберите меню проект, Индекс C/C++ и нажмите кнопку "повторно разрешить неразрешенные включает."

поддержка C++11 в Eclipse Kepler Service Release 1 (Build id: 20130919-0819)

в последней версии Eclipse Kepler SR1 вам нужно только добавить - std=c++11

  1. Правой Кнопкой Мыши на проекте и выберите свойства
  2. перейти к C / C++ General и препроцессор включает пути, макросы и т. д.
  3. выберите поставщики вкладка
  4. добавить - std=c++11 до команда для получения спецификаций компилятора:
  5. применить изменения, индекс должен быть сгенерирован автоматически.

на " команда для получения спецификаций компилятора:"-строка должна выглядеть так:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

начиная с CDT 8.3 ( доступно как обновление Kepler), есть новая опция диалекта в настройках сборки:

http://wiki.eclipse.org/CDT/User/NewIn83#Build

Я использую Eclipse Kepler и исправить это я сделал это:

1-Щелкните правой кнопкой мыши проект > > Proprietes >> C / C++ Build :: Settings

2-перешел к компилятору GCC G++ > > разное > > другие флаги

 i then added -std=c++11 
 hit apply and ok

это исправило мою проблему!

Я надеюсь, что это помогло!

запуск eclipse indigo и cdt 8.0.2 здесь. Я следовал всем руководствам, но все равно нужно было установить препроцессор define вручную, чтобы найти такие вещи, как std::unique_ptr. Файл "память" проверяет это. Установите __cplusplus в 201103L на вкладке " символы "в разделе" пути и символы "в" C++ General " в свойствах проекта.

добавление флага диалекта "- std=c++11 " в свойства проекта-> C/C++ Build -> Settings -> Tool settings (GCC C++ Compiler -> Dialect) решило мою проблему в Eclipse Kepler, помимо настроек, указанных выше.

Я использую Eclipse Luna, и в C/C++ Build -> Settings нет" настроек инструмента". Я сделал добавить-std=c++11 в командную строку спецификации компилятора в разделе" C / C++ General -> Preprocessor Includes -> Providers", как было предложено. Но это все еще не удовлетворяло способность моего индексатора разрешать emplace().

поэтому я посмотрел в заголовочном файле и обнаружил, что функции emplace зависят от __cplusplus >= 201103L. поэтому я просто добавил символ препроцессора "__cplusplus" и дал ему значение 201103.

своего рода хакерский, но индексатор доволен. (И makefiles определяют мои флаги сборки, а не проект eclipse)

решение, предоставленное MrEricSir, работает только после установки последнего Eclipse Oxygen CDT. Это не работает для меня с Mars CDT.