Вопрос по c++, eclipse – Eclipse CDT: символ 'cout' не может быть решен

57

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

Вы импортировалиiostream? Hauleth
Можете ли вы опубликовать код Джефф? hmjd
Да, я импортировал Iostream. Jeff
@hmjd Я не могу опубликовать весь код, но больше ничего не должно иметь значения. Jeff
Сегодня, когда мы говорим об "импорте" iostream, я надеюсь, что вы на самом деле & quot; #include & lt; iostream & gt; & Quot; поскольку понятие импорта не совсем корректно в C ++. ScarletAmaranth

Ваш Ответ

14   ответов
1

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

8

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

  1. Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros, etc.
  2. Providers -> CDT GCC built-in compiler settings
  3. Uncheck Use global provider shared between projects (you can also modify the global provider if it fits your need)
  4. In Command to get compiler specs, add -std=c++11 at the end
  5. Index->Rebuild

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

Примечание: я нахожусь на Kepler. Я не уверен, работает ли это на более раннем Eclipse.

Это решение другой проблемы: проблема символов C ++ 11 не решена. У ОП были проблемы с получением даже символов C ++ 98, таких какstd::cout решена.
0

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

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

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

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

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

92

Скорее всего, в ваших настройках отсутствуют какие-то системные каталоги включения, что делает невозможным корректный синтаксический анализ 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_directories (& quot; / usr / include / x86_64-linux-gnu & quot;) в мой файл cmake, после чего сгенерированный проект eclipse сможет анализировать вектор, cout, string и все другие существующие компоненты из ST ++ C ++. библиотека. Для тех, кому нужна дополнительная информация о настройке проектов Eclipse CDT из файлов CMake, смотрите этот пост:stackoverflow.com/questions/9453851/…
для меня, Ubuntu 10.04, нужно добавить /usr/include/c++/4.4/i486-linux-gnu
идеальное решение, слава. решил мою проблему с локальными сообщениями об ошибках относительно методов и классов mysql в c ++ на adt + eclipse juno bundle с добавленным cdt (ubuntu 12.04). upvote, конечно!
Мне просто пришлось перестроить индекс после обновления моей системы; более новая версия eclipse 4.4.1 столкнулась с трудностями при импорте рабочего пространства / обновлений плагинов и т. д.
1

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

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

Они перечислены в разделе "Свойства проекта" & gt; C / C ++ General & gt; Препроцессор Включает & gt; GNU C ++ Настройки встроенного компилятора CDT GCC [Shared] Под это тонна включает.

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

4

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

  1. Project Context -> C/C++ General -> Paths and Symbols -> Symbols Tab
  2. Select C++ in the Languages panel.
  3. Add symbol __cplusplus with a value of 201103.

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

1

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

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

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

Только через пару раз я заметил, что настройки по умолчанию для & quot; Набор инструментов для настроек индексатора & quot; нет В моем случае я изменил его на Linux GCC и все ошибки исчезли.

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

Ура,

Guy.

решил мою проблему :)
4

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

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

  • Go to Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers and check Enable language settings providers for this project.

  • Restart Eclipse.

Надеюсь, это уже делает свое дело.

1

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

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

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

  • Right click on the project
  • Choose Properties
  • Navigate to C/C++ General > Paths and Symbols > Includes tab
  • Click Add...
  • Click File system...
  • Browse to the location of your Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
  • Click OK

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

16

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

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

1

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

1

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

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

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

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

  1. Eclipse detects the GCC toolchains available on the system
  2. Your Eclipse project is configured to use a particular toolchain
  3. Eclipse does discovery on the toolchain to find its include paths and built-in defines, i.e. by running it with relevant options and reading the output
  4. Eclipse reads the header files from the include paths
  5. Eclipse indexes the source code in your project
  6. Eclipse shows warnings about unresolved symbols in the editor

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

Toolchains

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

Если у вас есть существующий проект 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 Вкладки.

Indexing

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

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

0

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

Похожие вопросы