Включение С++ 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
Ответ 3
Начиная с CDT 8.3 (доступного как обновление Kepler), в настройках сборки есть новый диалект:
http://wiki.eclipse.org/CDT/User/NewIn83#Build
Ответ 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.