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. Наконец, я нашел лучшее решение, выполнив следующие действия:
-
Project
→ Properties
→ C/C++ General
→ Preprocessor Include Paths, Macros, etc.
-
Providers
→ CDT GCC built-in compiler settings
- Снимите флажок
Use global provider shared between projects
(вы также можете изменить глобального поставщика, если он соответствует вашим потребностям)
- В
Command to get compiler specs
добавьте -std=c++11
в конец
-
Index
→ Rebuild
Voila, легко и просто. Надеюсь, это поможет.
Примечание. Я нахожусь в Кеплере. Я не уверен, работает ли это на более раннем Eclipse.
Ответ 5
Я использую Ubuntu 12.04/Eclipse 4.2.1/CDT 8.1.1, и у меня была такая же проблема в течение довольно долгого времени: импорт проекта С++ из SVN вызовет эти досадные ошибки "Unresolved include", и я бы вместо этого должны создать новый проект и скопировать туда файлы в виде обходной части (все еще частичной, так как функции SVN не будут там!).
Наконец, я нашел простое, удовлетворительное решение:
Надеюсь, это уже делает трюк.
Ответ 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
мое было немного легко выяснить щелчок правой кнопкой мыши> запустить как> запустить настройку
флажки включают системную библиотеку, унаследованную сеть