it-swarm.com.ru

Eclipse CDT: символ 'cout' не может быть решен

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

/usr/include/c++/4.6
/usr/include
/usr/include/linux
/usr/local/include

и т.п. 

Я пробовал 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 ++ исправляет это. Я приму ответ, объясняющий, какие настройки в существующем проекте могут вызвать это (поэтому мне не нужно вырезать и вставлять все мои проекты).

57
Jeff

Скорее всего, в ваших настройках отсутствуют какие-то системные каталоги включения, что делает невозможным корректный синтаксический анализ 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) после добавления включаемых каталогов.

92
vitaut

Чтобы избавиться от ненужных символьных предупреждений, сначала вы должны понять, как в Eclipse CDT обычно появляются неизвестные символьные предупреждения. Это его процесс, более или менее:

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

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

Наборы инструментов

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

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

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

Discovery

Затем, если для C/C++ Build -> Discovery Options -> Discovery profiles scope проекта установлено значение Per Language, во время следующей сборки новая цепочка инструментов, связанная с проектом, будет использоваться для автоматического обнаружения включаемых путей и символов и будет использоваться для обновления «встроенных» путей и символов. которые отображаются в C/C++ General -> Paths and Symbols проекта на вкладках Includes и Symbols.

Индексирование

Иногда вам нужно переиндексировать заново после установки цепочки инструментов и выполнения сборки, чтобы убрать предупреждения о старых символах; щелкните правой кнопкой мыши папку проекта и перейдите к Index -> Rebuild, чтобы сделать это.

(протестировано с Eclipse 3.7.2/CDT 8)

19
rakslice

Спасибо большое за ответы выше. Я добавляю ответ для конкретного варианта использования ...

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

16
Jack Kelly

Сначала я попробовал отмеченное решение здесь. Это сработало, но это довольно хакерски, и вам нужно повторять его каждый раз, когда вы обновляете 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.

8
Andy Shiue

У меня была похожая проблема с * std :: shared_ptr * с Eclipse с использованием MinGW и gcc 4.8.1. В любом случае, Eclipse не разрешит * shared_ptr *. Чтобы это исправить, я вручную добавил макрос __cplusplus к символам C++ и - альт! - Затмение может найти его. Поскольку я указал -std = c ++ 11 в качестве параметра компиляции, я (гм) предположил, что анализатор кода Eclipse также будет использовать эту опцию. Итак, чтобы исправить это:

  1. Контекст проекта -> Общие положения C/C++ -> Пути и символы -> Вкладка «Символы»
  2. Выберите C++ на панели «Языки».
  3. Добавьте символ __cplusplus со значением 201103 .

Единственная проблема с этим состоит в том, что gcc будет жаловаться, что символ уже определен (!), Но компиляция будет завершена, как и раньше.

4
codefool

Я использую Ubuntu 12.04/Eclipse 4.2.1/CDT 8.1.1, и у меня была такая же проблема довольно долгое время: импорт проекта C++ из SVN вызывал бы эти раздражающие ошибки «Unresolved включением», и вместо этого мне пришлось бы создавать новый проект и скопируйте туда файлы как обходной путь (все еще частичный, так как функциональности SVN там не будет!).

Наконец, я только что нашел простое, удовлетворительное решение:

  • Перейдите к Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers и проверьте Enable language settings providers for this project.

  • Перезапустите Eclipse.

Надеюсь, это уже помогает.

4
user1995696

Я просто удаляю все ошибки в списке: проблема. .... Затем закрываю проект И заново открываю проект Clean projectbuild allrun

тогда эти глупые ошибки уходят. 

1
vivi

У меня была та же проблема с использованием Eclipse CDT (Kepler) на Windows с установленной Cygwin. После указания свойств проекта для каждого включения в Cygwin, о котором я только мог подумать, он все равно не смог найти cout

Последняя недостающая часть оказалась C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include.

Подводить итоги:

  • Щелкните правой кнопкой мыши на проекте
  • Выберите Properties
  • Перейдите на вкладку C/C++ General> Paths and Symbols> Includes
  • Нажмите Add...
  • Нажмите File system...
  • Перейдите к местоположению вашего Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
  • Нажмите OK

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

1
user1205577

Для меня это помогло включить автоматическое обнаружение в Свойствах -> C/C++ - Сборка -> Параметры обнаружения, чтобы решить эту проблему.

1
WaTho

Я создал проект Makefile, используя cmake на Ubuntu 16.04.

Когда я создал проект Eclipse для Make-файлов, сгенерированных cmake, я создал новый проект примерно так:

Файл -> новый -> Makefile проект с существующим кодом.

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

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

Ура,

Guy. 

1
Guy Avraham

Если ничего не помогает, как в моем случае, просто отключите аннотации. Я запустил проект c ++ 11 с собственным make-файлом, но не смог решить все проблемы. Даже если вы отключите аннотации, Eclipse все равно сможет помочь вам с автозаполнением. Самое главное, что отладчик все еще работает!

1
ormurin

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

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

Они перечислены в разделе «Свойства проекта»> «Общие сведения о C/C++> Включает препроцессор»> GNU C++ Параметры встроенного компилятора GCC [Shared] CDT. Под ними находится тонна включений.

Эти настройки устанавливаются выбранной вами цепочкой инструментов.

1
Bluebaron

У меня такое было после обновления gcc и Eclipse на ArchLinux. То, что решило это для меня, было Project -> C/C++ Index -> Rebuild.

0
DBedrenko

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

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

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

Sudo apt-get установить g ++

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

0
Francky_V