Wie kann man eine Klasse in C ++ korrekt erweitern und ihre Header-Datei schreiben?

8

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.

Tatsächliche Struktur:

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 .

Refactored Struktur:

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:

%Vor%

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.

    
Angelo 29.09.2013, 15:03
quelle

2 Antworten

6

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%     
enhzflep 29.09.2013 16:05
quelle
5

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%     
Shimon Rachlenko 29.09.2013 15:05
quelle

Tags und Links