web-dev-qa-db-de.com

Eclipse CDT: Symbol 'cout' konnte nicht aufgelöst werden

Der Fehler ist wie oben. Ich habe alle Dateien, die im Eclipse-Projekt enthalten sein sollten:

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

usw. 

Ich habe std::cout und using namespace std;cout ausprobiert, aber es wird immer noch nicht gelöst. 

Ich habe iostream und cstdlib importiert.

Ich bin auch auf Ubuntu 12.04 mit Eclipse 3.7.2.

Code-Auszug:

#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;
    /* ... */
}

using namespace std;


UPDATE: Ich hatte das Eclipse-Projekt aus vorhandenem Code erstellt. Durch das Erstellen eines neuen C++ - Projekts wird dieses Problem behoben. Ich akzeptiere eine Antwort, die erläutert, welche Einstellung im bestehenden Projekt dazu führen könnte (ich muss also nicht alle meine Projekte schneiden und einfügen).

57
Jeff

Höchstwahrscheinlich haben Sie einige systemspezifische Include-Verzeichnisse, die in Ihren Einstellungen fehlen, was es dem Indexer unmöglich macht, iostream korrekt zu analysieren, also die Fehler. Durch Auswahl von Index -> Search For Unresolved Includes im Kontextmenü des Projekts erhalten Sie die Liste der nicht aufgelösten Include-Dateien, die Sie in /usr/include suchen und in C++ Include Paths and Symbols in den Projekteigenschaften um Verzeichnisse hinzufügen können.

Auf meinem System musste ich /usr/include/c++/4.6/x86_64-linux-gnu hinzufügen, um bits/c++config.h aufgelöst zu werden, und ein paar weitere Verzeichnisse.

Vergessen Sie nicht, den Index neu zu erstellen (Index -> Rebuild), nachdem Sie Include-Verzeichnisse hinzugefügt haben.

92
vitaut

Um nicht benötigte Symbolwarnungen zu entfernen, sollten Sie zuerst verstehen, wie Eclipse CDT normalerweise mit unbekannten Symbolwarnungen aufwartet. Dies ist mehr oder weniger sein Prozess:

  1. Eclipse erkennt die im System verfügbaren GCC-Toolchains
  2. Ihr Eclipse-Projekt ist für die Verwendung einer bestimmten Toolchain konfiguriert
  3. Eclipse sucht in der Toolchain nach den Include-Pfaden und integrierten Definitionen, d. H. Indem es mit relevanten Optionen ausgeführt und die Ausgabe gelesen wird
  4. Eclipse liest die Headerdateien aus den Include-Pfaden
  5. Eclipse indiziert den Quellcode in Ihrem Projekt
  6. Eclipse zeigt Warnungen zu nicht aufgelösten Symbolen im Editor an

Auf lange Sicht ist es möglicherweise besser, Probleme mit den vorherigen Schritten zu beheben, als ihre Ergebnisse durch manuelles Hinzufügen von Include-Verzeichnissen, Symbolen usw. zu überschreiben.

Toolchains

Wenn Sie GCC installiert haben und Eclipse dies erkannt hat, sollte es GCC als Toolchain-Auswahl angeben, die ein neues C++ - Projekt verwenden könnte, die ebenfalls in Window -> Preferences -> C/C++ -> New CDT Project Wizard im Feld Toolchains auf der Registerkarte Preferred Toolchains auf der rechten Seite angezeigt wird. Wenn es nicht angezeigt wird, lesen Sie die CDT-FAQs zu Compilern, die spezielle Umgebungen benötigen (sowie MinGW und Cygwin answers für Windows Folk.)

Wenn Sie über ein Eclipse C++ - Projekt verfügen, können Sie die zugehörige Toolchain ändern, indem Sie die Projekteigenschaften öffnen und zu C/C++ Build -> Tool Chain Editor gehen und die gewünschte Toolchain im Pulldown Current toolchain: auswählen. (Sie müssen das Kontrollkästchen Display compatible toolchains only zuerst deaktivieren, wenn sich die gewünschte Toolchain von der zuvor im Projekt festgelegten unterscheidet.)

Wenn Sie dem System nach dem Start von Eclipse eine Toolchain hinzugefügt haben, müssen Sie diese neu starten, damit die Toolchain erkannt werden kann.

Entdeckung

Wenn für C/C++ Build -> Discovery Options -> Discovery profiles scope des Projekts Per Language festgelegt ist, wird die neue mit dem Projekt verknüpfte Toolchain beim nächsten Build für die automatische Erkennung von Include-Pfaden und -Symbolen verwendet und zum Aktualisieren der "eingebauten" Pfade und Symbole verwendet die im C/C++ General -> Paths and Symbols des Projekts in den Registerkarten Includes und Symbols angezeigt werden.

Indizierung

Manchmal müssen Sie erneut indizieren, nachdem Sie die Toolchain eingerichtet und einen Build durchgeführt haben, damit die alten Symbolwarnungen verschwinden. Klicken Sie mit der rechten Maustaste auf den Projektordner und gehen Sie zu Index -> Rebuild.

(getestet mit Eclipse 3.7.2/CDT 8)

19
rakslice

Vielen Dank für die Antworten oben. Ich füge eine Antwort für einen bestimmten Anwendungsfall hinzu ...

Bei einem Projekt mit zwei Zielarchitekturen mit jeweils einer eigenen Build-Konfiguration (das Hauptziel ist eine eingebettete AVR-Plattform; das zweite Ziel ist mein lokaler Linux-PC für die Ausführung von Unit-Tests) musste Preferences -> C/C++ -> Indexer -> Use active build configuration sowie _ festgelegt werden /usr/include/c++/4.7, /usr/include und /usr/include/c++/4.7/x86_64-linux-gnu zu Project Properties -> C/C++ General -> Paths and Symbols hinzufügen und dann den Index neu erstellen.

16
Jack Kelly

Ich habe hier zuerst die markierte Lösung ausprobiert. Es hat funktioniert, aber es ist ziemlich hackig und Sie müssen es jedes Mal wiederholen, wenn Sie das gcc aktualisieren. Endlich finde ich eine bessere Lösung, indem ich Folgendes mache:

  1. Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros, etc.
  2. Providers -> CDT GCC built-in compiler settings
  3. Deaktivieren Sie Use global provider shared between projects (Sie können auch den globalen Anbieter ändern, wenn dies für Sie erforderlich ist.)
  4. Fügen Sie in Command to get compiler specs am Ende -std=c++11 hinzu
  5. Index-> Rebuild

Voila, einfach und unkompliziert. Hoffentlich hilft das.

Hinweis: Ich bin bei Kepler. Ich bin mir nicht sicher, ob dies bei früherer Eclipse funktioniert.

8
Andy Shiue

Ich hatte ein ähnliches Problem mit * std :: shared_ptr * mit Eclipse mit MinGW und gcc 4.8.1. Egal was, Eclipse würde * shared_ptr * nicht auflösen. Um dies zu beheben, habe ich das __cplusplus-Makro manuell zu den C++ - Symbolen und - viola hinzugefügt! - Eclipse kann es finden. Da ich -std = c ++ 11 als Kompilierungsoption angegeben habe, ging ich (ähm) davon aus, dass der Eclipse-Code-Analysator diese Option ebenfalls verwenden würde. Um dies zu beheben:

  1. Projektkontext -> C/C++ - Allgemein -> Pfade und Symbole -> Registerkarte "Symbole"
  2. Wählen Sie C++ im Bereich Sprachen aus.
  3. Fügen Sie das Symbol __cplusplus mit einem Wert von 201103 hinzu.

Das einzige Problem dabei ist, dass gcc sich darüber beschwert, dass das Symbol bereits definiert ist (!), Aber das Kompilieren wie zuvor abgeschlossen ist.

4
codefool

Ich verwende Ubuntu 12.04/Eclipse 4.2.1/CDT 8.1.1 und hatte das gleiche Problem seit geraumer Zeit: Das Importieren eines C++ - Projekts aus SVN würde diese ärgerlichen "Ungelösten Einschluss" -Fehler verursachen und ich müsste stattdessen erstellen ein neues Projekt und kopiere die Dateien als Umgehungslösung (noch teilweise, da SVN-Funktionalität nicht vorhanden wäre!).

Endlich habe ich gerade eine einfache, befriedigende Lösung gefunden:

  • Gehen Sie zu Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers und überprüfen Sie Enable language settings providers for this project.

  • Starten Sie Eclipse neu.

Hoffentlich macht das schon den Trick.

4
user1995696

Ich lösche einfach alle Fehler in der buttom: problem list . Schließe dann das Projekt .__

dann gehen diese dummen Fehler. 

1
vivi

Ich hatte das gleiche Problem mit Eclipse CDT (Kepler) auf Windows mit Cygwin installiert. Nachdem ich die Projekteigenschaften auf jedes Cygwin-Include gerichtet hatte, das mir einfiel, konnte cout noch nicht gefunden werden. 

Das letzte fehlende Stück war C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include.

Um zusammenzufassen:

  • Klicken Sie mit der rechten Maustaste auf das Projekt
  • Wähle Properties
  • Navigieren Sie zu C/C++ General> Paths and Symbols> Includes
  • Klicken Sie auf Add....
  • Klicken Sie auf File system....
  • Navigieren Sie zum Speicherort Ihres Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include.
  • Klicken Sie auf OK.

So sah mein Projekt aus, als alles gesagt und getan wurde: enter image description here

1
user1205577

Für mich hat es geholfen, die automatische Erkennung in Eigenschaften -> C/C++ - Build -> Erkennungsoptionen zu aktivieren, um dieses Problem zu beheben.

1
WaTho

Ich habe das Makefile-Projekt mit cmake auf Ubuntu 16.04 erstellt.

Als ich das Eclipse-Projekt für die von cmake erzeugten Makefiles erstellt habe, habe ich das neue Projekt so erstellt:

Datei -> neu -> Projektdatei mit vorhandenem Code erstellen.

Erst nach ein paar Mal ist mir aufgefallen, dass die Standardeinstellung für "Toolchain für Indexer-Einstellungen" keine ist. In meinem Fall habe ich sie in Linux GCC geändert und alle Fehler sind verschwunden. 

Hoffe es hilft und lass mich wissen, wenn es keine legitime Lösung ist.

Prost,

Kerl. 

1
Guy Avraham

Wenn alles andere fehlschlägt, wie in meinem Fall, deaktivieren Sie einfach die Anmerkungen. Ich habe ein C++ 11-Projekt mit einem eigenen Makefile gestartet, konnte aber nicht alle Probleme beheben. Selbst wenn Sie Anmerkungen deaktivieren, kann Eclipse Ihnen bei der automatischen Vervollständigung helfen. Am wichtigsten ist, dass der Debugger immer noch funktioniert!

1
ormurin

Ihr Jungs seht unter dem falschen Abschnitt ... Ich habe den Unterschied erkannt, als ich nach der letzten Frustrierung mit Windows in Linux installierte, und der Unterschied war sofort offensichtlich.

Im neuen Setup habe ich einen Include-Ordner in einem Projekt, den ich aus einer vorhandenen Quelle erstellt habe. Ich kann das erweitern und eine Tonne von Inhalten sehen; Ich kann sie jedoch nicht hinzufügen .. Dies führt mich zu einer Suche nach dem Ort, an dem diese Dateien aufgelistet wurden.

Sie sind unter Projekteigenschaften> C/C++ - Allgemein> Preprozessor Includes> GNU C++ CDT GCC eingebaute Compiler-Einstellungen [Shared] .__ aufgelistet.

Diese Einstellungen werden von der ausgewählten Toolchain festgelegt.

1
Bluebaron

Ich hatte dies nach dem Update von gcc und Eclipse auf ArchLinux. Was für mich gelöst wurde, war Project -> C/C++ Index -> Rebuild.

0
DBedrenko

Einfach noch ein paar Ratschläge hinzufügen, nachdem ich selbst ein paar Sachen ausprobiert habe und es nicht funktioniert ...

Ich hatte GCC installiert und den Pfad zu den Includes korrekt gesetzt. Hatte auch den std-Fehler und konnte nichts für Cout zum Laufen bringen (und ich vermute, dass irgendetwas im SL ist ...)

Es dauerte eine Weile, bis mir klar wurde, dass g ++ nicht installiert war - gcc war aber nicht g ++. Also mach einfach:

Sudo apt-get install g ++

Starten Sie Eclipse neu. Angenommen, die oben genannten Details zu gcc und den Pfaden zu Include sind in Ordnung, sollten Sie jetzt in Ordnung sein ...

0
Francky_V

meins war ein bisschen einfach herauszufinden Rechtsklick> Ausführen als> Konfiguration ausführen

kontrollkästchen einschließlich Systembibliothek, geerbtes Netz

0
Sanjay