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

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

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

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

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

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

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

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

8 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 - Пошел в GCC G++ Compiler >> Разное >> Другие флаги

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

Это решило мою проблему!

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

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

Добавление флага диалекта "-std= C++11" в Свойства проекта-> Сборка C/C++ -> Настройки -> Настройки инструмента (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.

Другие вопросы по тегам