Hinweis: Ich habe meine alte Frage so klar wie möglich bearbeitet.
Ich habe eine Drittanbieter-Bibliothek namens person.lib
und deren Header person.h
. Dies ist meine eigentliche Projektstruktur und es kompiliert und läuft perfekt.
main.cpp
%Vor% Nun möchte ich meinen Code umdefinieren, indem ich die Deklaration meiner Klasse Client
von ihrer Definition dividiere und client.h
und client.cpp
erstelle. PAY ATTENTION : sayHello()
und onMessage(const * char const)
sind Funktionen der Personenbibliothek .
main.cpp
%Vor%client.cpp
%Vor%client.h
%Vor% Wie Sie sehen, habe ich einfach eine client.h
erstellt, in der die Basisklasse person.h
enthalten ist. Dann habe ich client.cpp
erstellt, in der client.h
und die Definitionen enthalten sind seiner Funktionen. Jetzt gibt mir die Zusammenstellung diese Fehler:
Es ist ein bloßes Cut & amp; Refactoring, aber es funktioniert nicht und ich verstehe wirklich nicht warum? Was ist die Lösung und warum gibt es mir diese Fehler? Gibt es etwas über C ++ - Struktur, das ich vermisse? Danke.
Hier ist eine Hund-n-Vogel-Implementierung (Halskrause, Cheep Cheep) cLawyer ist in main.cpp definiert und implementiert, während cPerson und cClient in ihren eigenen Headerdateien definiert sind, die in ihrer eigenen cpp-Datei implementiert sind. Ein besserer Ansatz würde den Namen der Klasse speichern. Dann müsste man die speak-Methode nicht überladen - man könnte einfach den className in jeder abgeleiteten Kopie setzen. Aber das wäre in meinen Schätzungen ein weniger nützliches Beispiel für Sie gewesen.
main.cpp
%Vor%cPerson.h
%Vor%cPerson.cpp
%Vor%cClient.h
%Vor%cClient.cpp
%Vor%Ausgabe
%Vor%Oben genannte Vorschläge:
%Vor% Sie deklarieren die Klasse Client zweimal - einmal in der .h
-Datei und einmal in .cpp
. Sie müssen es nur in der .h
-Datei deklarieren.
Sie müssen auch den using namespace person;
in die .h
-Datei setzen.
Wenn sich die Klasse Person in der Person namspace befindet, verwenden Sie person::Person
, um darauf zuzugreifen.
Der client.cpp
muss nur Definitionen enthalten!
Ich denke, für den Linker ist die Klasse client in client.h definiert und die Klasse client in client.cpp sind verschiedene Klassen, daher kann die Implementierung von Client :: Client () nicht gefunden werden. Ich beabsichtige, die Deklaration der Klasse Client aus der client.cpp zu entfernen und dort nur die Definitionen der Funktionen zu belassen:
%Vor%Tags und Links compilation c++ header