Eclipse CDT: Symbol '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;


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

Ответ 1

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

Ответ 2

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

  • Eclipse обнаруживает программные средства GCC, доступные в системе
  • Ваш проект Eclipse настроен на использование определенной инструментальной цепочки
  • Eclipse делает обнаружение на toolchain, чтобы найти его включенные пути и встроенные определения, то есть запустив его с соответствующими параметрами и прочитав вывод
  • Eclipse считывает файлы заголовков из включенных путей
  • Eclipse индексирует исходный код в вашем проекте
  • Eclipse показывает предупреждения о неразрешенных символах в редакторе

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

компилированных инструментов

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

Если у вас есть существующий проект Eclipse С++, вы можете изменить связанную инструментальную цепочку, открыв свойства проекта и перейдя в 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)

Ответ 3

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

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

Ответ 4

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

  • ProjectPropertiesC/C++ GeneralPreprocessor Include Paths, Macros, etc.
  • ProvidersCDT GCC built-in compiler settings
  • Снимите флажок Use global provider shared between projects (вы также можете изменить глобального поставщика, если он соответствует вашим потребностям)
  • В Command to get compiler specs добавьте -std=c++11 в конец
  • IndexRebuild

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

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

Ответ 5

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

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

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

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

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

Ответ 6

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

  • Контекст проекта → C/С++ Общие → Контуры и символы → Вкладка "Символы"
  • Выберите С++ на панели "Языки".
  • Добавить символ __ cplusplus со значением 201103.

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

Ответ 7

Для меня это помогло включить автоматическое обнаружение в Properties → C/С++ - Build → Discovery Options для решения этой проблемы.

Ответ 8

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

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

Ответ 9

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

Ответ 10

У меня была такая же проблема, когда был установлен 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

Ответ 11

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

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

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

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

Ответ 12

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

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

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

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

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

Приветствия,

Гай.

Ответ 13

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

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

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

sudo apt-get install g++

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

Ответ 14

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

Ответ 15

мое было немного легко выяснить щелчок правой кнопкой мыши> запустить как> запустить настройку

флажки включают системную библиотеку, унаследованную сеть