Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Это пример фрагмента кода C ++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
Редактор Eclipse жалуется на:
Function 'unique_ptr' could not be resolved
Компиляция Makefile работает отлично. Как заставить Eclipse перестать жаловаться на подобные ошибки?
std::unique_ptr<char[]>
unique_ptr<char>
звонитьdelete
, что неправильно, так как он был создан сnew[]
?delete
, когда вам нужно будетdelete[]
позвонить.unique_ptr<char>
Предполагает , что он получает указатель, который будет удален сdelete
.unique_ptr<char[]>
ожидает массив, который удаляется сdelete[]
правильно.Ответы:
Я нашел эту статью на форуме Eclipse, просто выполнил эти шаги, и она работает для меня. Я использую Eclipse Indigo 20110615-0604 на Windows с установкой Cygwin.
-std=c++0x
(или для более новой версии компилятора-std=c++11
в конце. ... вместо компилятора GCC C ++ у меня также есть компилятор Cygwin__GXX_EXPERIMENTAL_CXX0X__
(обязательно добавьте и добавьте два подчеркивания) в поле «Имя» и оставьте поле «Значение» пустым.Описание этого также есть в FAQ по Eclipse : Eclipse FAQ / C ++ 11 Особенности .
Настройка изображения Eclipse
источник
&&
.Инструкция для Eclipse CDT 4.4 Luna и 4.5 Mars
Сначала, перед созданием проекта, настройте синтаксический анализатор Eclipse:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
в текстовом поле под названием
Command to get compiler specs
добавить-std=c++11
Теперь вы можете создать проект, конфигурация которого зависит от того, какой проект вы создали:
Для проекта, созданного как: Файл -> Новый -> Проект -> C / C ++ -> Проект C ++
Щелкните правой кнопкой мыши по созданному проекту и откройте
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Поместите
-std=c++11
в текстовое поле с названиемother dialect flags
или выберитеISO C++11
изLanguage standard
выпадающего списка.Для проекта CMake
Генерация файлов проекта затмения (внутри вашего проекта)
Затем импортируйте созданный каталог в eclipse как стандартный проект eclipse. Щелкните правой кнопкой мыши проект и откройте
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
включить
CDT GCC Build-in Compiler Settings
и переместить его выше, чемContributed PathEntry Containers
(это важно)Последний общий шаг
перекомпилировать, восстановить
Project
->C/C++ Index
и перезапустить Eclipse.источник
-std=c++11
былProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Добавьте-std=c++11
к этому. Мне предложили установить его в глобальных настройках рабочего пространства, но он не был скопирован в папку, которую я описал выше, когда я создал новыйMakefile
проект.Обновление 2016:
Начиная с gcc 6 ( изменения ), диалект C ++ по умолчанию - C ++ 14. Это означает, что если вам явно не нужен более новый или более старый диалект, чем чем-либо, вам больше не нужно ничего делать с затмением.
Для Луны и Марса
Этот вики-раздел сообщества содержит ответ Трисмегистоса;
1. Перед созданием проекта настройте синтаксический анализатор Eclipse:
Окно -> Настройки -> C / C ++ -> Сборка -> Настройки -> Обнаружение -> Настройки встроенного компилятора CDT GCC
в текстовом поле «Команда, чтобы получить спецификации компилятора».
-std=c++14
2. Создайте проект, конфигурация зависит от того, какой проект вы создали:Для проекта, созданного как: Файл -> Новый -> Проект -> C / C ++ -> Проект C ++
Щелкните правой кнопкой мыши по созданному проекту и откройте
Свойства -> Сборка C / C ++ -> Настройки -> Настройки инструмента -> Компилятор GCC C ++ -> Диалект
Поместите
-std=c++14
в текстовое поле, озаглавленное другие флаги диалекта, или выберите ISO C ++ 11 из выпадающего стандарта языка.Теперь есть новый способ решить эту проблему без взлома GXX_EXPERIMENTAL.
Для самых последних версий : (в настоящее время
Juno и KeplerLuna ):В более новых версиях Juno настройки находятся по адресу
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Старые версии 2012/2013:
В C / C ++ Build (в настройках проекта) найдите препроцессор «Включить путь» и перейдите на вкладку «Поставщики» . Отмените выбор всех параметров, кроме настроек компилятора CDT GCC. Затем снимите отметку «Поделиться настройками записи». Добавьте параметр -std = c ++ 11 в текстовое поле с именем Command, чтобы получить спецификации компилятора.
Перейти к дорожкам и символам. В разделе «Символы» нажмите « Восстановить настройки по умолчанию» и затем примените.
Ноты:
Eclipse требователен к нажатию на кнопку «Применить», вы должны делать это каждый раз, когда выходите из вкладки настроек.
[Самореклама]: я написал свои более подробные инструкции, основанные на вышеизложенном. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Спасибо пользователю
Nobody
на https://stackoverflow.com/a/13635080/1149664источник
#ifndef __GXX_EXPERIMENTAL_CXX0X__
возвращает true и код ниже не анализируется. Когда я добавляю__GXX_EXPERIMENTAL_CXX0X__
в символы проекта, массив разрешается, но ссылки моего проекта путаются. В чем может быть проблема здесь?Для последнего (Юнона) затмения мне помогло следующее, не нужно объявлять
__GXX_EXPERIMENTAL_CXX0X__
о себе. Это работает для индексатора CDT и в качестве параметра для компилятора:"название вашего проекта" -> правой кнопкой мыши -> свойства:
Общие сведения о C / C ++ -> Пути препроцессора, пути, макросы и т. Д. -> переключиться на вкладку «Поставщики»:
для «Конфигурации» выберите «Выпуск» (а затем «Отладка»)
выключите всех провайдеров и просто выберите «Настройки встроенного компилятора CDT GCC»
снимите флажок «Поделиться настройками записей между проектами (глобальный поставщик)»
в «Команде для получения спецификаций компилятора:« добавить »-std = c ++ 11» без кавычек (может работать и с кавычками)
нажмите применить и закройте варианты
перестроить индекс
Теперь все, что связано с c ++ 11, должно корректно разрешаться индексатором.
win7 x64, последнее официальное затмение cdt mingw-w64 gcc 4.7.2 из проекта mingwbuilds на sourceforge
источник
У меня была такая же проблема на моем Eclipse Juno. Эти шаги решили проблему:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.источник
Для Eclipse CDT Kepler мне удалось избавиться от
std::thread
неразрешенного символа:Зайдите в Настройки-> C / C ++ -> Сборка-> Настройки
Выберите вкладку Discovery
Выберите настройки встроенного компилятора CDT GCC [Shared]
Добавьте -std = c ++ 11 в поле «Команда для получения спецификации компилятора:», например:
Добавление
-std=c++11
к проектуProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
флагов было недостаточно для Kepler, однако этого было достаточно для более старых версий, таких как Helios.источник
Я пока не могу комментировать, поэтому пишу свой ответ:
Он связан с
__GXX_EXPERIMENTAL_CXX0X__
Eclipse Juno и CDT 8.x и действительно для него.Некоторые части этого ответа уже описаны в других ответах, но я хочу, чтобы он был последовательным.
Чтобы сделать возможным сборку с использованием stdc ++ 11, нужно добавить специальный флаг для компилятора. Вы можете сделать это через свойства проекта. Чтобы изменить свойства проекта
RMB
иProject properties
илиALT + ENTER
. Затем C / C ++ Build -> Настройки -> Настройки инструмента -> Компилятор GCC C ++ -> Разное -> Другие флаги. Помещенный -std = C ++ 11 в конце линии, для GCC это будет выглядеть примерно так:-c -fmessage-length=0 -std=c++11
. При добавлении -stdc ++ 11 флаг компилятор (GCC) объявит__GXX_EXPERIMENTAL_CXX0X__
сам.На данный момент вы можете построить проект, используя все достоинства C ++ 11.
Проблема в том, что Eclipse имеет свой собственный анализатор для проверки ошибок - вот почему вы по-прежнему получаете все неприятные ошибки в редакторе Eclipse, в то же время вы можете создавать и запускать проект без каких-либо ошибок. Есть способ решить эту проблему, явно объявив
__GXX_EXPERIMENTAL_CXX0X__
флаг для проекта, это можно сделать (как сказал Карстен Грайнер): C / C ++ General -> Paths and Symbols -> Symbols -> GNU C ++. Нажмите «Добавить ...» и в конце__GXX_EXPERIMENTAL_CXX0X__
(обязательно добавьте и добавьте два подчеркивания) в поле «Имя» и оставьте поле «Значение» пустым. А теперь это дополнительная часть, которую я хотел бы охватить в комментарии к первому ответу, перейдите по ссылке: C / C ++ General -> Preprocessor Include Path Macros и т. Д. -> Providers, и выберитеCDT Managed Build Setting Entries
затем нажмите APPLY и вернитесь на вкладку Entries, в GNU C ++ теперь должна быть CDT Managed Build Setting Entries, чтобы проверить, определено ли внутри, есть__GXX_EXPERIMENTAL_CXX0X__
ли она -> APPLY, и перестройте индекс, с этим все будет в порядке.источник
У меня тоже было несколько проблем (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Многое упомянуто выше, извините, чтобы повторить это, но кроме того у меня были проблемы с использованием
как часть c ++ 11 (добавление -pthread для компоновщика решает эту проблему). Во всяком случае, наконец, эти настройки работали нормально:
Проект -> Свойства -> Сборка C / C ++ -> Настройки -> Разное. Добавить
флаг для компиляторов GCC и G ++. Нажмите Применить.
Для компоновщика того же окна, Разное, Флаги компоновщика, добавлено
флаг. Настройки общей библиотеки, Имя общего объекта, добавьте
флаг тоже. Нажмите Применить.
C / C ++ Общие -> Пути и символы -> Символы TAB, GNU C ++ выбран, Добавить
(неважно)
флаг. Нажмите Применить.
C / C ++ Общие -> Препроцессор Включить пути .. -> Вкладка Провайдеры: проверка
CDT GCC встроенные настройки компилятора
и для «Команда, чтобы получить спецификации компилятора», добавьте
флаг. Снимите флажок Поделиться. Нажмите Применить.
CDT управляет записями настроек сборки, проверьте это тоже. Снимите флажки с двух других. Нажмите Применить.
Возвращаясь к вкладке «Записи», GNU C ++ CDT, управляет настройками сборки, вы должны увидеть добавленные
запись.
Вот и все. При кодировании печатать
может теперь автоматически завершать класс потока, например, сборки должны работать нормально и не должно быть
во время выполнения.
источник
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
шаг, который работал для меня. Спасибо большое: DЯ не знаю, только ли это я, решение с наивысшим рейтингом не работает для меня, моя версия eclipse - просто обычная платформа eclipse, установленная с помощью sudo apt-get install eclipse в Ubuntu. Но я нашел решение, которое использует метод вместе как из решения с наивысшим рейтингом, так и из второго, то, что я сделал, чтобы заставить его работать, описано ниже (обратите внимание, что другие шаги, такие как создание проекта C ++ и т. д., для простоты игнорируются)
После того, как вы создали проект C ++
(1) C / C ++ Общее -> Пути и символы -> Символы -> GNU C ++. Нажмите «Добавить ...» и вставьте GXX_EXPERIMENTAL_CXX0X (обязательно добавьте и добавьте два подчеркивания) в «Имя» и оставьте «Значение» пустым.
(2) В C / C ++ Build (в настройках проекта) найдите препроцессор «Включить путь» и перейдите на вкладку «Поставщики». Отмените выбор всех параметров, кроме настроек компилятора CDT GCC. Затем снимите отметку «Поделиться настройками записи». Добавьте опцию -std = c ++ 11 в текстовое поле под названием Command, чтобы получить спецификации компилятора
После выполнения выше 2 и 2 только шагов, он работает, затмение способно разрешить unique_ptr, я не знаю, почему это решение работает, надеюсь, что оно может помочь людям.
источник
Eclipse C / C ++ не распознает символ,
std::unique_ptr
даже если вы включили заголовок памяти C ++ 11 в свой файл.Предполагая, что вы используете компилятор GNU C ++, это то, что я сделал, чтобы исправить:
Проект -> Свойства -> Общие сведения о C / C ++ -> Пути включения препроцессора -> GNU C ++ -> Записи настроек пользователя CDT
Нажмите на кнопку «Добавить ...»
Выберите «Макрос препроцессора» из выпадающего меню
Нажмите Применить, а затем ОК, чтобы вернуться к своему проекту.
Затем перестройте индекс C ++: Проекты -> Индекс C / C ++ -> Перестроить
источник
Для меня на Eclipse Neon я следовал за ответом Trismegistos здесь выше , ДА я также добавил дополнительный шаг:
Хит применить и ОК.
Ура,
Guy.
источник
источник
Ни взлом, ни более чистая версия не работают на Индиго. Взлом игнорируется, а необходимые параметры конфигурации отсутствуют. Без видимой причины, сборка начала работать после того, как она не работала и не указала причину. По крайней мере, из командной строки я получаю воспроизводимые результаты.
источник
Чтобы получить поддержку C ++ 14 в Eclipse Luna, вы можете выполнить следующие шаги:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
добавьте "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
добавьте "-std = c ++ 14"Переиндексировать ваш проект и в конечном итоге перезапустить Eclipse. Это должно работать как ожидалось.
источник
Я решил это таким образом на Mac. Я использовал Homebrew для установки последней версии gcc / g ++. Они попадают в / usr / local / bin с include в / usr / local / include.
Я записал CD в / usr / local / bin и сделал символическую ссылку на g ++ @ 7, что бы ни было просто на g ++, потому что @ bit раздражает.
Затем я перешел в MyProject -> Свойства -> Сборка C / C ++ -> Настройки -> Компилятор GCC C ++ и изменил команду с «g ++» на «/ usr / local / bin / g ++». Если вы решили не делать символическую ссылку, вы можете быть более конкретным.
Сделайте то же самое для компоновщика.
Применить и применить и закрыть. Пусть перестроит индекс. Некоторое время это показывало огромное количество ошибок, но я думаю, что это было при создании индексов. Пока я выяснял ошибки, все они исчезли без дальнейших действий.
Я думаю, не проверяя, что вы также можете перейти в Eclipse -> Properties -> C / C ++ -> Core Build Toolchains и отредактировать их с разными путями, но я не уверен, что это будет делать.
источник
У меня была похожая проблема с использованием Eclipse C ++ 2019-03 для смешанного проекта C и C ++, в котором использовались std :: option и std :: swap. То, что работало для меня, было этим. В проекте Свойства-> Сборка C / C ++-> Настройки-> Настройки инструмента-> Кросс-компилятор G ++ удалите -std = gnu ++ 17 из Разное и поместите его в Диалект-> Другие флаги диалекта.
источник
Когда я использую кросс-компилятор, я часто получаю продвинутые пользовательские системы сборки, тщательно разработанные коллегами. Я использую «Makefile Project с существующим кодом», поэтому большинство других ответов не применимы.
В начале проекта я должен указать, что я использую кросс-компилятор в мастере для «Makefile Project с существующим кодом». Раздражает то, что за последние 10 лет или около того кнопка кросс-компилятора в этом мастере не запрашивала, где находится кросс-компилятор. Таким образом, на этапе, который устраняет проблему C ++ и проблему кросс-компиляции, я должен перейти на вкладку провайдеров, как указано в ответах, таких как @ravwojdyla выше, но поставщик, который я должен выбрать, является поставщиком кросс-компилятора. Затем в командной строке я указываю полный путь к компилятору и добавляю -std = gnu ++ 11 для стандарта C ++, для которого я хочу иметь поддержку. Это работает так же, как и следовало ожидать.
Вы можете сделать это с существующим проектом. Единственное, что вам может понадобиться, - это перезапустить индексатор.
Мне никогда не приходилось добавлять экспериментальный флаг или переопределять определение __cplusplus. Единственное, что, если у меня есть значительный объем современного C-кода, мне некуда поставить стандартную C-опцию.
А когда дела идут очень плохо, получение журнала парсера с использованием этой команды в подменю Indexer может быть очень информативным.
источник