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


85

РЕДАКТИРОВАТЬ: Оказывается, это действительно не относится к Eclipse Kepler. Мне пришлось использовать тот же процесс для Eclipse Juno. Проблема заключалась в том, что, похоже, в других сообщениях, отвечающих на этот же вопрос, отсутствуют шаги.

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

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

Я выполнил инструкции из сообщения

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

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

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

Ответы:


183

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

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

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

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

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

1
Спасибо. Это сработало. Возможно, я неправильно прочитал другой пост, на который ссылался, но похоже, что в этом посте не было упоминания о настройке компилятора.
user327301 06

1
У меня не работает. Моя основная проблема - это нерешенные проблемы, связанные с C ++ 11. Я вставил то -std=c++11место, где вы сказали, и перестроил полный индекс, все еще показывает кучу нераспознанных std :: cout, std :: set и т. Д.
Доланор

2
РЕДАКТИРОВАТЬ: я не нашел первую часть, где она должна, но я компилирую через make, так что это может быть объяснение. (Я нашел его в конфигурации рабочего пространства и установил его). Но я вставил его compiler spec, и все равно не работает. std :: shared_ptr и не распознается. Хотя раньше он работал на более старой машине с juno.
Dolanor

1
В моем случае (gcc) я использовал -std = c ++ 0x. Так что все работает. Спасибо!
Денис Заикин

4
@MrEricSir есть ли способ сделать этот параметр для рабочего пространства, чтобы при добавлении нового проекта он автоматически применялся и к нему?
Ивайло Странджев

25

Поддержка C ++ 11 в Eclipse Kepler Service Release 1 (идентификатор сборки: 20130919-0819)

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

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

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

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

2
С GCC мне пришлось добавить -std = c ++ 0x
ccook

Какой GCC вы используете? c ++ 0X было старым именем (псевдонимом) для C ++ 11
MeJ

1
Обнаружил это во второй раз, настраивая свежий eclipse CDT - настройка должна быть более интуитивной.
ccook


6

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

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

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

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

Это устранило мою проблему!

Надеюсь, это помогло!


Это лучший ответ для платформы Eclipse, версия: 4.3.1 - Не знаю, что такое Kepler / Juno!
TCSGrad

Eclipse Kepler - это Eclipse Version 4.3.X
Karrq

4

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


Да, работает для миграций из старых проектов.
Guy L

2

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


1

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

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.