webentwicklung-frage-antwort-db.com.de

Eclipse C/C++ zeigt Fehler aber kompiliert?

Ich baue also etwas Arduino-Code in Eclipse, wie in Your Second Arduino Project beschrieben, aber jedes Mal, wenn ich eine Arduino-Bibliothek wie Serial verwende, unterstreicht Eclipse meine Funktionsnamen und behauptet, sie könnten nicht aufgelöst werden. Der Code wird jedoch tatsächlich kompiliert, daher bin ich ziemlich ratlos, warum Eclipse der Meinung ist, dass die Funktionen fehlen. Wenn jemand eine Idee hat, wie man dieses Problem lösen kann, wäre ich dankbar. Vielen Dank im Voraus.

EDIT: Ich hätte genauer sein sollen, unterstreicht Eclipse die METHODS in den Arduino-Bibliotheken. Wenn ich also Serial.println("hello"); verwende, unterstreicht es println() und behauptet, dass es nicht gelöst werden kann. Dann wird es gut kompiliert und die Methode funktioniert, wenn sie auf das Arduino-Board hochgeladen wird.

EDIT2: Ich habe meinen Fehler gefunden und stellte fest, dass ich versucht habe, einige C++ - Funktionen in einer C-Datei zu verwenden, und Eclipse hat es nicht gemocht. Ich wurde in .cpp umbenannt und alle Roten verschwanden;) Danke für Ihre Hilfe!

19
SuperTron

Welche Farbe ist für den Anfang die Unterstreichung? Dies macht einen Unterschied, denn Gelb bedeutet, dass es sich um eine Warnung handelt, und Rot bedeutet, dass es sich um einen Fehler handelt.

Zweitens müssen Sie auf der Registerkarte "Probleme" nach Fehlern suchen. Wenn dort nichts ist, wurde es tatsächlich richtig kompiliert.

Nun zurück zu der ursprünglichen Frage. Je nach Art des Projekts, das Sie erstellen, ist dieses Verhalten nicht ungewöhnlich. Eclipse scheint die Indizierung bestimmter Projekte schlecht zu machen. Wenn Sie "make all" von der Befehlszeile aus ausführen (was eigentlich Eclipse während des Builds tut), wird wahrscheinlich der gesamte Code aufgelöst und der Code gut erstellt.

Eclipse verwendet jedoch ein anderes separates Werkzeug , um den gesamten Quellcode zu indizieren und Variablen-/Funktionsdefinitionen und Deklarationen aufzulösen. Dies ist buchstäblich ein Fall, in dem die linke Hand nicht weiß, was die rechte Hand tut.

6
DevNull

Je nach Konfiguration zieht Eclipse möglicherweise die Pfade aus Ihrem Build-Setup zum Indexieren aus. Höchstwahrscheinlich ist es nicht ... es wird korrekt gebaut, weil Ihr Build-Setup in Ordnung ist und Sie wahrscheinlich von Hand bauen können.

Der CDT-Indexer (der die Engine für die Entscheidung ist, wo all diese hübschen Unterstreichungen sowie Code-Vervollständigung, F3-Deklarationsspringen usw. herkommen) ist in vielen Fällen nicht intelligent genug, um Ihre Makefiles zu analysieren und zu wissen, wo sie suchen müssen für Header und Quelle. Sie müssen Eclipse diese Informationen manuell mitteilen.

Gehen Sie zu Projekteigenschaften -> C/C++ - Allgemein -> Pfade und Symbole .

Der Arbeitsaufwand, den Sie dafür leisten müssen, hängt von Ihrer Umgebung ab. Wenn diese externe Bibliothek das einzige ist, was Ihnen Kopfschmerzen bereitet, müssen Sie wahrscheinlich nur die Pfade für diese Bibliothek hinzufügen und neu indizieren:

Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Index -> Neu erstellen

33
dolphy

Die Lösung unten hat für mich funktioniert: Klicken Sie mit der rechten Maustaste auf Ihr Projekt. Dann: Eigenschaften -> C/C++ - Allgemein -> Pfade und Symbole -> Symbole -> GNU C++. Fast sicher gibt es keine Symbole, wenn Sie dieses Problem haben. Fügen Sie das Symbol "__cplusplus" mit dem Wert "201402L" hinzu. Klicken Sie mit der rechten Maustaste auf Project -> Index -> Rebuild .

3
Zormex

Beim Auflösen von Symbolen scheint der CDT-Indexer alle Header-Dateien zu berücksichtigen, unabhängig davon, welche tatsächlich in der Übersetzungseinheit enthalten sind. Ein entsprechender Fehlerbericht wurde bei Eclipse Bugzilla eingereicht: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=439553

1
Compfy

Ich hatte Ordner einschließen

Projekteigenschaften -> C/C++ - Allgemein -> Pfade und Symbole -> Include

Wenn ich diese entfernte, verschwanden die roten Unterstreichungen, d. H. Der Build und die IDE wurden synchronisiert.

1
robor78

Eclipse funktioniert mit C++ nicht so gut wie mit Java, sollte Sie jedoch über Probleme warnen, sobald Sie auf "Neu erstellen" in der Menüleiste klicken.

Versuchen Sie es und sehen Sie, ob es Ihr Problem löst.

0
E. Nusinovich

Ich hatte das gleiche Problem. Index -> Rebuild hat nicht geholfen. Wenn ich die Zeile #include <avr/iom1280.h> in main.cpp hinzugefügt habe und Index -> Rebuild unterstrichen habe, verschwindet dies. Dann habe ich die Zeile #include <avr/iom1280.h> und das Projekt noch ohne Inderlines gelöscht.

Ersetzen Sie iom1280.h durch den Namen Ihres Controllers. Suchen Sie im Ordner "avr\include\avr \" nach verfügbaren Namen

0
Petro Shm