Ich bin ein C ++ Neuling. Heute habe ich ein Problem: In Header-Datei definiere ich eine Klasse:
%Vor%und in der Quelldatei programmiere ich als:
%Vor%Bei der Kompilierung sagt der Compiler immer: ' Member deklaration nicht gefunden '. warum?
Ich benutze eclipse CDT + Cygwin GCC
vielen Dank!
Template-Klassen müssen sowohl deklariert als auch in der Kopfzeile oder einer anderen Datei definiert sein, die von Benutzern eingeschlossen wird. Sie können nicht wie üblich in einer Kopfzeile deklariert und in einer Quelldatei definiert werden.
Der Grund dafür ist, dass die Vorlage durch einen tatsächlichen Typ und die Quelle ersetzt werden muss, die generiert und kompiliert wird, wenn sie verwendet wird, und der Compiler kann Vorlagen für jeden möglichen Typ, der mitkommt, nicht vorkompilieren kann damit umgehen (und muss auf den Code zugreifen können).
Dies verursacht einige Probleme beim Übergeben von Objekten, wenn mehrere Bibliotheken die gleichen Vorlagen enthalten, da sie mit verschiedenen Versionen des Headers kompiliert werden können (siehe die Eine Definitionsregel).
"Elementdeklaration nicht gefunden" ist ein Fehler, der vom statischen Analysetool Eclipse ( codan ) erzeugt wird Compiler. Wenn Sie diesen Fehler erhalten, aber die Kompilierung erfolgreich ist, ist dies ein falscher positiver Befund. Es ist bekannt, dass ältere Versionen dieses Tools einige falsche Ergebnisse liefern, siehe zum Beispiel diesen Fehlerbericht . Daher empfehle ich, Eclipse CDT auf die neueste Version zu aktualisieren. Wenn dies nicht hilft, senden Sie einen Fehlerbericht an Eclipse CDT.
Wenn Sie jedoch auch die Fehler vom Compiler bekommen (diese werden durch C / C ++ - Problem in der Spalte Typ in der Ansicht Probleme angezeigt), dann haben Sie wahrscheinlich vergessen, die Header-Datei hinzuzufügen.
Tags und Links c++ declaration member