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;


обновление: я создал затмение проект из существующего кода. Создание нового проекта c++ исправляет его. Я приму ответ, который объясняет, какие настройки в существующем проекте могут вызвать это (поэтому мне не нужно вырезать и вставлять все мои проекты).

14 57

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 обычно приходит с неизвестными предупреждениями символов в первую очередь. Это его процесс, более или менее:

  1. Eclipse обнаруживает цепочки инструментов GCC, доступные в системе
  2. ваш проект Eclipse настроен на использование конкретного инструментария
  3. Eclipse делает обнаружение в цепочке инструментов, чтобы найти его пути включения и встроенные определения, т. е. запустив его с соответствующими опциями и чтение
  4. Eclipse считывает заголовочные файлы из путей включения
  5. Eclipse индексирует исходный код в вашем проекте
  6. Eclipse показывает предупреждения о неразрешенных символах в Редакторе

возможно, в долгосрочной перспективе будет лучше исправить проблемы с более ранними шагами, а не переопределять их результаты, вручную добавляя каталоги include, символы, так далее.

Toolchains

если у вас установлен GCC, и Eclipse обнаружил его, он должен перечислить этот GCC как выбор инструментальной цепочки, который может использовать новый проект C++, который также появится в Window -> Preferences -> C/C++ -> New CDT Project Wizard на это Toolchains коробка с правой стороны. Если он не появляется, см. ответ CDT FAQ о компиляторах, которые нуждаются в специальных средах (а также MinGW и программа ответы на Окна народные.)

если у вас есть существующий проект Eclipse C++, вы можете изменить связанную цепочку инструментов, открыв свойства проекта и перейдя к C/C++ Build -> Tool Chain Editor и выбор инструментальной цепочки, которую вы хотите от Current toolchain: pulldown. (Вам придется снять флажок Display compatible toolchains only сначала поле, если набор инструментов, который вы хотите, достаточно отличается от того, который был ранее установлен в проекте.)

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

Discovery

тогда, если проект 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 до Project Properties -> C/C++ General -> Paths and Symbols а затем перестроить индекс.

я попробовал отмеченное решение здесь в первую очередь. Это сработало, но это добрый хаки, и вам нужно переделывать его каждый раз, когда вы обновляете gcc. Я, наконец, найти лучшее решение, выполнив следующие действия:

  1. Project ->Properties ->C/C++ General ->Preprocessor Include Paths, Macros, etc.
  2. Providers ->CDT GCC built-in compiler settings
  3. убрать Use global provider shared between projects (вы также можете изменить глобального поставщика, если он соответствует вашим потребностям)
  4. на Command to get compiler specs добавьте -std=c++11 в конец
  5. Index ->Rebuild

вуаля, легко и просто. Надеюсь, это поможет.

Примечание: я на Kepler. Я не уверен, что это работает на более раннем затмении.

Я использую 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 также будет использовать эту опцию. Итак, чтобы исправить это:

  1. контекст проекта - > C / C++ общие - > пути и Символы - > Вкладка Символы
  2. выберите C++ на панели языки.
  3. добавить символ __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

вот что мой проект включает в себя в конечном итоге выглядит, когда все было сказано и сделано: enter image description here

вы, ребята, смотрите не в том разделе. Я понял разницу, когда я установил в Linux после того, как недавно разочаровался в Windows, и разница была сразу же очевидна.

в новой настройке у меня есть папка includes в проекции, которую я создал из существующего источника. Я могу расширить это и увидеть тонну включений; однако я не могу добавить к ним. Это привело меня к охоте за тем, где эти файлы были перечислены.

они перечислены в Свойства проекта > C / C++ общие > препроцессор включает в себя > GNU C++ CDT GCC встроенные настройки компилятора [общие] Под это тонна включает.

эти параметры устанавливаются с помощью инструментов, которые вы выбрали.

Я создал проект Makefile с помощью cmake на Ubuntu 16.04.

при создании проекта eclipse для Makefiles, который сгенерировал cmake, я создал новый проект следующим образом:

File -- > new --> Makefile проект с существующим кодом.

только после того, как пару раз это сделал, я заметил, что настройка по умолчанию для "Toolchain for indexer settings" отсутствует. В моем случае я изменил его на Linux GCC, и все ошибки исчезли.

надеюсь, это поможет и дайте мне знать, если это не законные решения.

спасибо,

парень.

просто добавляя еще один совет после того, как попробовал кучу вещей сам, и это не работает....

У меня был установлен GCC и путь к включениям установлен правильно. Была ошибка std, а также, и не мог получить ничего работает для cout (и я подозреваю, что-нибудь в SL...)

Мне потребовалось некоторое время, чтобы понять, что g++ не был установлен - gcc был, но не g++. Так что просто сделайте:

sudo apt-get install g++

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

У меня это произошло после обновления gcc и eclipse на ArchLinux. Что решило это для меня было Project -> C/C++ Index -> Rebuild.