Включение С++ 11 в Eclipse Juno/Kepler/Luna CDT

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

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

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

Я следил за инструкциями из сообщения

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

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

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

Ответ 1

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

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

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

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

  • Щелкните правой кнопкой мыши свой проект и выберите "Свойства"
  • В разделе C/С++ General нажмите "Препроцессор Включить пути, макросы"
  • Выберите вкладку "Провайдеры"
  • В списке должен быть элемент, который говорит что-то вроде "GCC Built in Compiler Settings". Выберите эту запись.
  • Снимите флажок "Использовать глобальный поставщик..."
  • В списке есть окно с надписью "Команда для получения спецификаций компилятора". Добавьте к этому "-std = С++ 0x".
  • Переместите "GCC Built in Compiler Settings" в верхней части списка, используя кнопку "Вверх" справа.
  • Нажмите "Применить", а затем "ОК".
  • Вернитесь в рабочее пространство Eclipse, выберите меню проекта, индекс C/С++ и нажмите "Повторить неразрешенные запросы".

Ответ 2

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

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

  • Щелкните правой кнопкой мыши на своем проекте и нажмите Свойства
  • Перейдите к C/С++ Общие и Препроцессор Include Paths, Макросы и т.д.
  • Перейдите на вкладку Провайдеры.
  • Добавьте -std = С++ 11 в команду, чтобы получить спецификации компилятора:
  • Применить изменения, Индекс должен генерироваться автоматически.

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

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

Ответ 4

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

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

2 - отправился в компилятор GCC g++ → Разное → Другие флаги

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

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

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

Ответ 5

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

Ответ 6

Добавление диалога диалекта "-std = С++ 11" в свойства проекта- > C/С++ Build → Настройки → Настройки инструмента (GCC С++ Compiler → Dialect) решили мою проблему в Eclipse Kepler, кроме настроек заявлено выше.

Ответ 7

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

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

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

Ответ 8

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