Ich habe an einem C++ - Projekt mit einem normalen Texteditor gearbeitet. Später habe ich alle Dateien in Eclipse importiert, um das Debuggen zu vereinfachen.
In Eclipse passiert etwas Seltsames. Es beschwert sich über "Mitgliedserklärung nicht gefunden", auch wenn ich die Header-Datei eingefügt habe. Die Header-Datei hat die Funktionsdefinition.
Wie behebe ich dieses Problem?
Danke im Voraus
"Elementdeklaration nicht gefunden" ist ein Fehler, der vom statischen Eclipse-Analysetool ( codan ) verursacht wird. Wenn Sie diese Fehlermeldung erhalten, die Kompilierung jedoch erfolgreich ist, ist dies ein falsches positives Ergebnis. Es ist bekannt, dass ältere Versionen dieses Tools einige Fehlalarme auslösen, siehe zum Beispiel diesen Fehlerbericht . Daher empfehle ich, Eclipse CDT auf die neueste Version zu aktualisieren.
Eine weitere Ursache für diesen Fehler ist ein nicht behobenes Include, das verhindert, dass Eclipse einen Teil Ihres Codes korrekt analysiert. Durch Auswahl von Index -> Search For Unresolved Includes
im Kontextmenü des Projekts erhalten Sie eine Liste der nicht aufgelösten Includes. Siehe diese Antwort für Einzelheiten zur Fehlerbehebung.
Hier ist ein Beispiel:
class C {
void f(std::vector<int>&);
};
void C::f(std::vector<int>&) {} // Member declaration not found
Das obige Beispiel verursacht den Fehler "Member-Deklaration nicht gefunden" in Eclipse CDT, auch wenn <vector>
enthalten, aber nicht behoben ist (aufgrund von falsch konfigurierten Include-Pfaden).
Ich habe dieses Problem auch mehrmals in Eclipse erlebt, obwohl das Erstellen erfolgreich war. Wir können dieses Problem einfach lösen, indem wir den C/C++ - Index im Projektmenü neu erstellen. :)
Ich habe festgestellt, dass " Member-Deklaration nicht gefunden " auch angezeigt wird, wenn Sie eine Klasse mit einem Namen erstellen, der bereits verwendet wird oder ein Schlüsselwort ist.
Auch mit CDT 9.2.1 und Eclipse Neon 4.6.3 "Member Declaration not found" werden Probleme gemeldet. Wie von Srijeyanthan beantwortet, sollte das folgende Problem behoben werden: Projekt> C/C++ - Index> Neu erstellen.
Dieses Problem trat auch beim Aufteilen von Quell- und Header-Dateien in Eclipse auf. Dieses Problem wurde durch "Implementieren von Methoden" behoben. Eclipse wurde nicht manuell eingegeben und das Projekt erstellt. Durch das Implementieren von Methoden wurden "Inline-Funktionen" zur Quelldatei hinzugefügt.
Ich habe in meiner CPP-Datei einen Fehler gefunden, durch den diese Nachricht erstellt wird. Ich hatte namespace std {
am Anfang der Datei und platzierte neue Funktionen, die ich nach dem Schließen von }
für namespace
erstellte. Das Verschieben des schließenden }
an das Ende der Datei, sodass sich die definierten Dateien nun in der namespace
befanden, behebte die Fehlermeldung.
Beispiel, das den Fehler erzeugt.
#include "MyStrFuncs.h"
**namespace** std {
MyStrFuncs::MyStrFuncs() {
// TODO Auto-generated constructor stub
}
MyStrFuncs::~MyStrFuncs() {
// TODO Auto-generated destructor stub
}
} // This ends the **namespace**
//Additional functions will now generate the member declaration not found error...
int MyStrFuncs::str2i(string strIn) {
int results;
istringstream convert(strIn);
if( !(convert)>>results) results = 0;
return results;
}
// Fix by moving closing } for namespace to here. Good luck.
Ich habe dieses Problem in Eclipse, aber das Einrichten des Terminals war erfolgreich. Also erstelle ich den C/C++ - Index in Eclipse neu: Rechtsklick auf das Projekt -> Index -> Neu erstellen.