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

  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 и 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. Наконец, я нашел лучшее решение, выполнив следующие действия:

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

  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 для файлов 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.