Update: C ++ undefinierte Referenz
-
24-10-2019 - |
Frage
Wenn ich versuche, das folgende C ++ - Programm auszuführen: AKTUALISIEREN (Aktualisierter Code, da der frühere Link einige Fehler hatte): http://pastie.org/private/pdpfpzg5fk7iegoHEBTQ
Ich bekomme Folgendes:
AKTUALISIEREN
Die jetzt auftretenden Fehler sind wie folgt:
Irgendwelche Ideen dazu?
Vielen Dank.
Lösung
Sie verknüpfen nicht in GradeBook. Versuchen
g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain
Sie haben auch ein Tippfehler "Maximun" anstelle von "maximal" in GradeBook.h
Andere Tipps
Sie haben Ihrem Compiler nicht gesagt, wo er das finden soll GradeBook
Konstruktordefinition (daher „undefinierte Referenz“). Sie müssen alle Quelldateien separat an den Compiler weitergeben oder intermediäre Objektdateien für alle Kompilierungseinheiten erstellen und diese miteinander verknüpfen.
Effektiv ist die einfachste Lösung:
g++ GradeBookMain.cc GradeBook.cc -o GradeBookMain
Um einen meiner bevorzugten IRC -Bots zu zitieren: Undefined Referenz ist ein Linkerfehler. Es ist kein Kompilierfehler. #Includes helfen nicht. Sie haben das Ding in der Fehlermeldung nicht definiert, Sie haben vergessen, die Datei zu verknüpfen, die sie definiert, Sie haben vergessen, mit der Bibliothek zu verlinken, die sie definiert, oder wenn es sich um eine statische Bibliothek handelt, haben Sie die falsche Reihenfolge in der Befehlszeile der Linker . Überprüfen Sie, welche.
C ++ ist fallempfindlich. Zum Beispiel können Sie zum Beispiel DisplayMessage, aber Sie definieren DisplayMessage. Das sind zwei unterschiedliche Funktionen. Sie sollten die Definition von DisplayMessage in DisplayMessage ändern oder wenn Sie es aufrufen
Was Ihr Compiler Ihnen sagt, ist, dass die Klassenbuchklasse definiert ist und in der Kompilierstufe alles in Ordnung ist. Wenn es jedoch an der Zeit gekommen ist, ein vollständiges ausführbares Programm zu verknüpfen, kann er den tatsächlichen Code für diese Klasse nicht finden. Und das liegt daran, dass Sie nur GradeBookMain.cc zusammengestellt und verknüpft haben. Sie können sie beide gleichzeitig kompilieren und verknüpfen:
g++ GradeBookMain.cc GradeBook.cc -o program
Oder Sie können sie separat kompilieren und dann miteinander verknüpfen:
g++ -c GradeBookMain.cc -o GradeBookMain.o
g++ -c GradeBook.cc -o GradeBook.o
g++ GradeBookMain.o GradeBook.o -o program
Sie müssen auch in GradeBook.cc kompilieren.
Im Moment wird die Klasse selbst nicht kompiliert oder verknüpft, und als solches kann der Linker die Klassenbuchklasse nicht finden - was sie beschwert.