Как включить поддержку C ++ 11 / C ++ 0x в Eclipse CDT?

194

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Это пример фрагмента кода С++ 11:

auto text = std::unique_ptr<char[]>(new char[len]);

Редактор Eclipse жалуется:

Function 'unique_ptr' could not be resolved

Компиляция Makefile отлично работает. Как заставить Eclipse перестать жаловаться на подобные ошибки?

  • 12
    По крайней мере, это должен быть std::unique_ptr<char[]>
  • 0
    Не уверен, что это правильно - char [] можно преобразовать в char *, а unique_ptr <char> - это указатель на char, например char *
Показать ещё 6 комментариев
Теги:
c++11
eclipse-cdt

14 ответов

212
Лучший ответ

Я нашел эту статью на форуме Eclipse, просто выполнил эти шаги и работает для меня. Я использую Eclipse Indigo 20110615-0604 для Windows с настройкой Cygwin.

  • Создайте новый проект на С++
  • Параметры по умолчанию для всех
  • После создания щелкните правой кнопкой мыши проект и перейдите в "Свойства"
  • C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Поместите -std=c++0x (или для более новой версии компилятора -std=c++11 в конце.... вместо компилятора GCC С++ У меня также есть компилятор Cygwin
  • C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и вставьте __GXX_EXPERIMENTAL_CXX0X__ (убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя", и оставьте поле "Значение" пустым.
  • Нажмите "Применить", сделайте все, что вы попросите, затем нажмите "ОК".

В этом разделе также есть описание этого в FAQ Eclipse: Eclipse FAQ/С++ 11 Особенности.

Настройка изображения Eclipse

  • 0
    Я не пробовал это, но это имеет смысл. Eclipse CDT использует сканер и препроцессор gcc.
  • 3
    @ EdH не правда. CDT имеет свой собственный синтаксический анализатор c ++. слава Богу
Показать ещё 21 комментарий
142

Инструкция для Eclipse CDT 4.4 Luna и 4.5 Mars

Сначала, перед созданием проекта, настройте синтаксический синтаксический анализатор Eclipse:

WindowPreferencesC/C++BuildSettingsDiscoveryCDT GCC Build-in Compiler Settings

в текстовом поле под названием Command to get compiler specs append -std=c++11

Теперь вы можете создать проект, настройка зависит от того, какой проект вы создали:

Для проекта, созданного как: Файл → Создать → Проект → C/С++ → Проект С++

Щелкните правой кнопкой мыши на созданном проекте и откройте

PropertiesC/C++ BuildSettingsTool SettingsGCC C++ CompilerDialect

Поместите -std=c++11 в текстовое поле под названием other dialect flags или выберите ISO C++11 из раскрывающегося списка Language standard.

Для проекта CMake

Сгенерировать файлы проекта eclipse (внутри вашего проекта)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

Затем импортируйте сгенерированную директорию для затмения в качестве стандартного проекта eclipse. Щелкните правой кнопкой мыши проект и откройте

PropertiesC/C++ GeneralPreprocessor Include Paths, Marcos etc.Providers

включить CDT GCC Build-in Compiler Settings и переместить его выше Contributed PathEntry Containers (Это важно)

Последний общий шаг

перекомпилируйте, восстановите ProjectC/C++ Index и перезапустите Eclipse.

  • 2
    у меня работает просто отлично
  • 6
    Никакой другой ответ не сработал для меня на Луне. Спасибо.
Показать ещё 13 комментариев
103

Обновление 2016:

По gcc 6 (changes), диалект С++ по умолчанию - С++ 14. Это означает, что, если вам явно не нужен более новый или более старый диалект, чем больше, вам больше не нужно ничего делать с eclipse.

Для Луны и Марса

Этот раздел wiki сообщества включает ответ Trismegistos;

1. Перед созданием проекта настройте синтаксический синтаксический анализатор Eclipse:

Окно → Настройки → C/С++ → Сборка → Настройки → Обнаружение → Настройки компилятора встроенного CDT GCC

в текстовом поле "Команда" для получения спецификаций компилятора append -std=c++14   2. Создание проекта, настройка зависит от того, какой проект вы создали:

Для проекта, созданного как: Файл → Создать → Проект → C/С++ → Проект С++

Щелкните правой кнопкой мыши на созданном проекте и откройте

Свойства → C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Диалект

Поместите -std=c++14 в текстовое поле с надписью других диалектов диалектов или выберите ISO С++ 11 из раскрывающегося списка Язык.

Теперь есть новый способ решить эту проблему без взлома GXX_EXPERIMENTAL.

Для самых последних версий: (В настоящее время Juno и Kepler Luna):

В новых версиях Juno настройки расположены в Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Старые версии 2012/2013:

  • В разделе C/С++ Build (в настройках проекта) найдите Препроцессор Include и перейдите на вкладку Провайдеры. Отмените выбор всех, кроме настроек компилятора CDT GCC. Затем отмените ссылку на настройки параметров.... Добавьте параметр -std = С++ 11 в текстовое поле Command, чтобы получить спецификации компилятора.

  • Перейдите к путям и символам. В разделе "Символы" нажмите восстановить значения по умолчанию, а затем примените.


Примечания:

Eclipse придирчив к применению, вам нужно делать это каждый раз, когда вы покидаете вкладку настроек.

[Самореклама]: Я написал свои более подробные инструкции на основе вышеизложенного. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Благодаря пользователю Nobody в https://stackoverflow.com/questions/13635079/enable-c11-in-eclipse-cdt-juno-kepler-luna-indexer

  • 3
    Спасибо, но это не помогло мне решить c ++ 11 ссылок. Программа компилируется правильно, но затмение не может их разрешить. Когда я проверяю «массив», #ifndef __GXX_EXPERIMENTAL_CXX0X__ возвращает true и код ниже не анализируется. Когда я добавляю __GXX_EXPERIMENTAL_CXX0X__ к символам проекта, массив разрешается, но ссылки на мой проект __GXX_EXPERIMENTAL_CXX0X__ . В чем может быть проблема здесь?
  • 0
    Не уверен, что вы подразумеваете под проверочным массивом. Вы пытались следовать инструкциям в моем блоге?
Показать ещё 16 комментариев
19

Для последнего (Juno) eclipse cdt для меня работало, не нужно объявлять __GXX_EXPERIMENTAL_CXX0X__ для себя. Это работает для индексатора CDT и как параметр для компилятора:

"название вашего проекта" → правый клик → свойства:

C/С++ Общие → Препроцессор Включить пути, Макросы и т.д. → перейти на вкладку с именем "Провайдеры":

  • для "Конфигурация" выберите "Release" (а затем "debug" )

  • отключите всех поставщиков и просто выберите "Встроенные настройки компилятора CDT GCC"

  • снимите флажок "Разделять записи настроек между проектами (глобальный поставщик)"

  • в команде "Command" для получения спецификаций компилятора: "добавить" -std = С++ 11 "без кавычек (может также работать с кавычками)

  • нажмите применить и закрыть параметры

  • перестроить индекс

Теперь все связанные с С++ 11 файлы должны быть правильно исправлены индексом.

win7 x64, последнее официальное затмение с cdt mingw-w64 gcc 4.7.2 из проекта mingwbuilds на sourceforge

  • 0
    по-прежнему получаю те же ошибочные предупреждения редактора, что и в Type 'std :: thread', не может быть разрешена, даже если он компилируется и выполняется OK
  • 2
    вам нужно скомпилировать один раз с новыми настройками, чтобы парсер «узнал», что установлен флаг std = c ++ 11
Показать ещё 2 комментария
13

У меня была такая же проблема на моем Eclipse Juno. Эти шаги решили проблему:

  • Перейдите к Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Добавьте символ: __ cplusplus со значением 201103L
  • 2
    Это должен быть принятый ответ, так как он работает и для проектов Makefile!
  • 0
    @ Jerk31, это не работает для Eclipse Juno, работающей на Windows (для меня), я все еще вижу эти жалованные ненужные ошибки, несмотря на то, что двоичный файл работает нормально. Пожалуйста, помогите мне!!!
Показать ещё 2 комментария
11

Для Eclipse CDT Kepler, что сработало для меня, чтобы избавиться от неразрешенного символа std:: thread:

  • Перейдите в раздел Настройки → C/С++ → Build- > Settings

  • Выберите вкладку "Открытие"

  • Выберите настройки встроенного компилятора CDT GCC [Shared]

  • Добавьте thestst = С++ 11 в поле "Команда для получения спецификации компилятора:", например:

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

  • Ok и перестроить индекс для проекта.

Добавление -std = С++ 11 для проекта Properties/C/С++ Build- > Settings- > Tool Settings- > GCC С++ Compiler- > Miscellaneous- > Других флагов для Kepler было недостаточно, однако этого было достаточно для более старые версии, такие как Helios.

  • 0
    Для меня в Neon 4.6.3 это тоже помогло !!
5

Я еще не могу прокомментировать, поэтому пишу собственный ответ:

Он связан с __GXX_EXPERIMENTAL_CXX0X__, и он действителен для Eclipse Juno и CDT 8.x.

Некоторые части этого ответа уже рассмотрены в других ответах, но я хочу, чтобы он был последовательным.

Чтобы сделать возможным создание с использованием stdС++ 11, нужно добавить определенный флаг для компилятора. Вы можете сделать это через свойства проекта. Чтобы изменить свойства проекта RMB и Project properties или ALT + ENTER. Затем C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Put -std = С++ 11 в конце строки, для GCC он будет выглядеть примерно так: -c -fmessage-length=0 -std=c++11. Добавляя -stdС++ 11 компилятор флага (GCC) объявит __GXX_EXPERIMENTAL_CXX0X__ сам по себе.

На этом этапе вы можете построить проект, используя все доброту С++ 11.

Проблема в том, что Eclipse имеет собственный парсер для проверки ошибок - вот почему вы все еще получаете все неприятные ошибки в редакторе Eclipse, в то же время вы можете создавать и запускать проект без каких-либо проблем. Существует способ решить эту проблему, явно объявив флаг __GXX_EXPERIMENTAL_CXX0X__ для проекта, это можно сделать (как сказал Карстен Грейнер):  C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и минуйте __GXX_EXPERIMENTAL_CXX0X__ (убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя" и оставьте поле "Значение" пустым. И теперь дополнительная роль, которую я хотел бы освежить в комментарии к первому ответу, перейдите по ссылке: C/С++ General → Preprocessor Include Path Macros и т.д. → Провайдеры и выберите CDT Managed Build Setting Entries, затем нажмите APPLY и вернитесь на вкладку "Вкладки", в разделе "GNU С++" теперь должны быть введены записи CDT Managed Build Setting, если внутри определено __GXX_EXPERIMENTAL_CXX0X__ если это → APPLY и перестроить индекс, вы должны быть в порядке.

3

У меня было несколько проблем (Ubuntu 13.04 64-bit, g++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Многие вещи упоминаются выше, жаль повторять их, но, кроме того, у меня были проблемы с использованием

std::thread

как часть С++ 11 (добавление -pthread для компоновщика решает эту проблему). Во всяком случае, наконец, эти настройки работали нормально:

Проект → Свойства → C/С++ Build → Настройки → Разное. Добавьте

-std=c++11

для компиляторов GCC и g++. Нажмите "Применить" .

Для компоновщика, того же окна, Разное, флаги компоновщика, добавлено

-pthread

флаг. Параметры общей библиотеки, имя общего объекта, добавьте

-Wl,--no-as-needed

. Нажмите "Применить" .

C/С++ Общие → Пути и символы → Символы TAB, выбранный GNU С++, Добавьте

__GXX_EXPERIMENTAL_CXX0X__

(нет значения)

флаг. Нажмите "Применить" .

C/С++ Общие → Препроцессор Включить пути.. → Вкладка "Поставщики": проверьте

Встроенные настройки компилятора CDT GCC

и для команды "Command для получения спецификаций компилятора" добавьте

-std=c++11

флаг. Снимите флажок. Нажмите "Применить" .

CDT Managages Build Setting Entries, проверьте это тоже. Снимите отметку с двух других. Нажмите "Применить" .

Возвращаясь к вкладке "Записи", GNU С++ CDT Managages Build Setting Entries, вы должны увидеть свой добавленный

__GXX_EXPERIMENTAL_CXX0X__

запись.

Что это. При кодировании, набрав

std::

теперь может автоматически завершить класс потока, например, сборки должны работать нормально и не должно быть

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

во время выполнения.

  • 0
    Это был Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous шаги, которые работали для меня. Большое спасибо: D
2

Я не знаю, является ли это только мне, решение с самым высоким рейтингом не работает для меня, моя версия eclipse - это обычная платформа eclipse, установленная с помощью sudo apt-get install eclipse в Ubuntu Но я нашел решение, которое использует метод вместе как из решения с самым высоким рейтингом, так и во втором, что я сделал для его работы, описано ниже (обратите внимание, что другие шаги, такие как создание проекта на С++ и т.д., Для простоты игнорируются)

Как только вы создали проект С++

(1) C/С++ Общие → Пути и символы → Символы → GNU С++. Нажмите "Добавить..." и вставьте GXX_EXPERIMENTAL_CXX0X (убедитесь, что добавьте и добавьте два символа подчеркивания) в "Имя" и оставьте поле "Значение" пустым.

(2) В разделе C/С++ Build (в настройках проекта) найдите препроцессор Include Path и перейдите на вкладку "Провайдеры". Отмените выбор всех, кроме настроек компилятора CDT GCC. Затем отмените ссылку на настройки параметров.... Добавьте параметр -std = С++ 11 в текстовое поле Command, чтобы получить спецификации компилятора

После выполнения выше 2 и 2 только шагов он работает, затмение может разрешить unique_ptr, я не знаю, почему это решение работает, надеюсь, что оно может помочь людям.

  • 0
    Это также сработало для меня (затмение неоновых). Сначала я не отменял выбор других провайдеров, которые все еще вызывали проблемы, но отменил выбор всех других провайдеров, кроме «Настройки встроенного компилятора CDT GCC» и «Настройки пользователя CDT». Спасибо!
1

Для меня в Eclipse Neon я выполнил Trismegistos ответ здесь выше, YET Я также добавил дополнительный шаг:

  • Перейти к проекту → Свойства → С++ Общие → Препроцессор Включить пути, Макросы и т.д. → Провайдеры → Встроенные параметры компилятора CDT Cross GCC, добавьте флаг "- std = С++ 11"

Нажмите и нажмите OK.

Приветствия,

Гай.

0

Eclipse C/С++ не распознает символ std::unique_ptr, даже если вы включили заголовок памяти С++ 11 в свой файл.

Предполагая, что вы используете компилятор GNU С++, это то, что я сделал для исправления:

Project → Properties → C/С++ General → Preprocessor Include Paths → GNU С++ → записи пользователя CDT

  • Нажмите кнопку "Добавить..."

  • Выберите "Макропроцессорный макрос" в раскрывающемся меню

    Name: __cplusplus     Value:  201103L
    
  • Нажмите "Применить", а затем "ОК", чтобы вернуться к вашему проекту.

  • Затем перестройте свой индекс С++: Projects → C/С++ Index → Rebuild

  • 0
    Это единственный метод, который работал для меня в Eclipse 2018-12. «Принятый» ответ и т. Д. Больше не работают в 2018-12 гг.
0

Чтобы получить поддержку С++ 14 в Eclipse Luna, вы можете сделать следующие шаги:

  • В C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings добавить "-std = С++ 14"
  • В C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous добавьте "-std = С++ 14"

Повторно запустите проект и, в конечном итоге, перезапустите Eclipse. Он должен работать как ожидалось.

0

Ни для iPhone, ни для чистых версий не работает. Хак игнорируется, и требуемые параметры конфигурации отсутствуют. Без всякой видимой причины, сборка начала работать после того, как не работала и не давала никакой полезной причины. По крайней мере, из командной строки я получаю воспроизводимые результаты.

0
  • щелкните правой кнопкой мыши проект и перейдите к "Свойствам"
  • C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Разное → Другие флаги. Поместите -lm в конец текстового поля других флагов и нажмите OK.
  • 0
    Какая версия Eclipse это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню