Eclipse CDT: символ "cout" не может быть разрешен
ошибка как выше. У меня есть то, что должно быть все необходимые файлы, включенные в проект eclipse:
/usr/include/c++/4.6
/usr/include
/usr/include/linux
/usr/local/include
etc.
пробовал std::cout
и using namespace std;
cout
но он все еще говорит неразрешенным.
я импортировал iostream
и cstdlib
.
кроме того, я на Ubuntu 12.04 с eclipse 3.7.2.
фрагмент кода:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include "XPLMDisplay.h"
#include "XPLMGraphics.h"
int XPluginStart(char * outName, char * outSig, char * outDesc) {
/* ... */
std::cout << "test" << std::endl;
/* ... */
}
использование пространства имен std;
обновление: я создал eclipse проект из существующего кода. Создание нового проекта c++ исправляет его. Я приму ответ, который объясняет, какие настройки в существующем проекте могут вызвать это (поэтому мне не нужно вырезать и вставлять все мои проекты).
14 ответов
скорее всего, у вас есть некоторые системные каталоги, отсутствующие в ваших настройках, что делает невозможным для индексатора правильно анализировать iostream, таким образом, ошибки. Выбор Index -> Search For Unresolved Includes
в контекстном меню проекта вы получите список неразрешенных включений, которые вы можете найти в /usr/include
и добавьте содержащие каталоги в C++ Include Paths and Symbols
в свойствах проекта.
в моей системе я должен был добавить /usr/include/c++/4.6/x86_64-linux-gnu
на bits/c++config.h
предстоит решить и еще несколько справочники.
Не забудьте перестроить индекс (Index -> Rebuild) после добавления каталогов include.
чтобы избавиться от предупреждений символов, которые вы не хотите, сначала вы должны понять, как Eclipse CDT обычно придумывает неизвестные предупреждения символов в первую очередь. Это его процесс, более или менее:
- Eclipse обнаруживает цепочки инструментов GCC, доступные в системе
- ваш проект Eclipse настроен на использование конкретного инструментария
- Eclipse делает обнаружение на цепочке инструментов, чтобы найти его пути включения и встроенные определения, т. е. запустив его с соответствующими параметрами и считыванием вывода
- Eclipse считывает файлы заголовков из путей включения
- Eclipse индексирует исходный код в вашем проекте
- Eclipse показывает предупреждения о неразрешенных символах в Редакторе
возможно, в долгосрочной перспективе лучше устранить проблемы с более ранними шагами, а не переопределять их результаты путем ручного добавления каталогов include, символов, так далее.
Toolchains
если у вас установлен GCC, и Eclipse обнаружил его, он должен указать, что GCC как выбор цепочки инструментов, который может использовать новый проект C++, который также появится в Window -> Preferences -> C/C++ -> New CDT Project Wizard
на это Toolchains
коробка с правой стороны. Если он не появляется, см. ответ CDT FAQ о компиляторах, которым нужны специальные среды (а также MinGW и Cygwin ответы на Народ окон.)
если у вас есть существующий проект Eclipse C++, вы можете изменить связанную цепочку инструментов, открыв свойства проекта и перейдя в C/C++ Build -> Tool Chain Editor
и выбор toolchain вы хотите от Current toolchain:
пулдаун. (Вам придется снять флажок Display compatible toolchains only
поле сначала, если цепочка инструментов, которую вы хотите, достаточно отличается от той, которая была ранее установлена в проекте.)
если вы добавили цепочку инструментов в систему после запуска Eclipse, вам нужно будет перезапустить ее для его обнаружения toolchain.
Открытие
тогда, если проект C/C++ Build -> Discovery Options -> Discovery profiles scope
установлено значение Per Language
, во время следующей сборки новая цепочка инструментов, связанная с проектом, будет использоваться для автоматического обнаружения путей и символов включения и будет использоваться для обновления "встроенных" путей и символов, которые отображаются вC/C++ General -> Paths and Symbols
на Includes
и Symbols
вкладки.
индексации
иногда нужно чтобы повторно индексировать снова после установки toolchain и выполнения сборки, чтобы удалить старые предупреждения символов; щелкните правой кнопкой мыши на папке проекта и перейдите в Index -> Rebuild
сделать это.
(протестировано с Eclipse 3.7.2 / CDT 8)
Спасибо за ответы выше. Я добавляю ответ для конкретного случая использования...
в проекте с двумя целевыми архитектурами каждая со своей конфигурацией сборки (основная цель-встроенная платформа AVR; вторая цель - мой локальный компьютер Linux для запуска модульных тестов) я нашел необходимым установить Preferences -> C/C++ -> Indexer -> Use active build configuration
а также добавить /usr/include/c++/4.7
, /usr/include
и /usr/include/c++/4.7/x86_64-linux-gnu
to Project Properties -> C/C++ General -> Paths and Symbols
а затем перестроить индекс.
сначала я попробовал отмеченное решение. Это сработало, но это своего рода хаки, и вам нужно переделывать его каждый раз, когда вы обновляете gcc. Наконец, я нашел лучшее решение, выполнив следующие действия:
-
Project
->Properties
->C/C++ General
->Preprocessor Include Paths, Macros, etc.
-
Providers
->CDT GCC built-in compiler settings
- убрать
Use global provider shared between projects
(вы также можете изменить глобального поставщика, если он соответствует вашим потребностям) - на
Command to get compiler specs
добавьте-std=c++11
в конец -
Index
->Rebuild
вуаля, легко и просто. Надеюсь, это поможет.
Примечание: я на Kepler. Я не уверен, что это работает на более раннем Eclipse.
Я использую Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1, и у меня была та же проблема в течение довольно долгого времени: импорт проекта C++ из SVN вызовет эти раздражающие ошибки "неразрешенного включения", и вместо этого мне придется создать новый проект и скопировать файлы там как обходной (все еще частичный, так как функциональность SVN не будет там!).
наконец-то я нашел простое, удовлетворительное решение:
на
Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers
и проверкаEnable language settings providers for this project
.Перезапустить Eclipse.
надеюсь, что это уже делает трюк.
У меня была аналогичная проблема с *std:: shared_ptr* с Eclipse с использованием MinGW и gcc 4.8.1. Несмотря ни на что, Eclipse не разрешит *shared_ptr*. Чтобы исправить это, я вручную добавил макрос __cplusplus в символы C++ и-viola! - Затмение может найти его. Так как я указал - std=c++11 в качестве опции компиляции я (ГМ) предположил, что анализатор кода Eclipse также будет использовать эту опцию. Итак, чтобы исправить это:
- контекст проекта - > C / C++ общие - > пути и Символы - > Вкладка Символы
- выберите C++ на панели языки.
- добавить символ __cplusplus стоимостью 201103.
единственная проблема с этим заключается в том, что gcc будет жаловаться, что символ уже определен(!), но компиляция будет завершена, как и раньше.
для меня это помогло включить автоматическое обнаружение в свойствах - > C / C++ - Build - > параметры обнаружения для решения этой проблемы.
Я просто удаляю все ошибки в списке buttom: problem. затем закройте проект и снова открыть проект чистый проект строим все запустить
тогда эти глупые ошибки идут.
Если все остальное не удается, как это было в моем случае, просто отключите аннотации. Я начал проект c++11 с собственным makefile, но не смог исправить все проблемы. Даже если вы отключите аннотации, eclipse все равно сможет помочь вам выполнить некоторое автозаполнение. Самое главное, отладчик все еще работает!
у меня была такая же проблема с использованием Eclipse CDT (Kepler)
on Windows
С Cygwin
установлен. После указания свойств проекта на каждый Cygwin, о котором я мог думать, он все еще не мог найти cout
.
последняя недостающая часть оказалась C:cygwin64\lib\gcc\x86_64-pc-cygwin.8.2\install-tool\include
.
подведем итоги:
- щелкните правой кнопкой мыши по проекту
- выбрать
Properties
- перейти к
C/C++ General
>Paths and Symbols
>Includes
tab - клик
Add...
- клик
File system...
- перейдите к местоположению вашего Cygwin
lib\gcc\x86_64-pc-cygwin.8.2\install-tool\include
- клик
OK
вот что мой проект включает в себя закончил выглядеть, когда все было сказано и сделано:
вы, ребята, смотрите не под тем разделом. Я понял разницу, когда я установил в Linux после недавнего разочарования в Windows, и разница была сразу очевидна.
в новой настройке у меня есть папка includes в проекции, которую я создал из существующего источника. Я могу расширить это и увидеть тонну включений; однако я не могу добавить к ним. Это привело меня к охоте за тем, где эти файлы были перечислены.
они перечислены в Свойства проекта > C / C++ общие > препроцессор включает > GNU C++ Параметры встроенного компилятора CDT GCC [общие] Под это тонна включает.
эти параметры задаются выбранной цепочкой инструментов.
Я создал проект Makefile с помощью cmake на Ubuntu 16.04.
при создании проекта eclipse для файлов Makefile, сгенерированных cmake, я создал новый проект следующим образом:
File --> new --> Makefile проект с существующим кодом.
только после того, как пару раз это сделал, я заметил, что настройка по умолчанию для "Toolchain для настроек индексатора" отсутствует. В моем случае я изменил его на Linux GCC, и все ошибки исчезли.
надеюсь, это поможет и дайте мне знать, если это не законные решения.
спасибо,
парень.
просто добавив еще один совет после того, как попробовал кучу вещей сам, и это не работает....
У меня был установлен GCC и путь к включениям установлен правильно. Имел ошибку std, а также не мог получить ничего, работающего для cout (и я подозреваю, что что-то в SL...)
Мне потребовалось некоторое время, чтобы понять, что g++ не был установлен - gcc был, но не g++. Так что просто сделайте:
sudo apt-get install g++
перезапустить eclipse. Предполагая, что выше упомянутые детали о gcc & paths to includes в порядке, теперь вы должны быть в порядке...
это произошло после обновления gcc и eclipse на ArchLinux. Что решило это для меня было Project -> C/C++ Index -> Rebuild
.