Konstruktor in CPP Datei auslagern bei Vererbung
-
Aber in der Headerdatei für MySubClass ist MyClass nicht bekannt, wenn Du dort nicht den Header für MyClass einbindest.
-
Naja auch mit einbinden läufts nicht..
Frag ich doch mal anders:
Ich habe nun zwei Header Dateien und Zwei CPP Dateien. MyClass.h/.cpp und MySubClass.h/.cpp. MyClass vererbt an MySubclass.
Was muss ich nun wo einbinden?
-
Du musst halt überlegen, welche Datei was benötigt.
Kommen Basisklassen und Member vor, so müssen deren Typen vollständig definiert sein. Das heisst, deren Header mit der Klasse muss eingebunden werden.
Arbeitest du dagegen mit Zeigern oder Referenzen als Member, so reicht eine Vorwärtsdeklaration.Die Implementationsdateien (.cpp) müssen ihren jeweils zugehörigen Header (.h) inkludieren, damit die Methoden der Klasse definiert werden können.
Abgeleitete Klassen müssen den Header ihrer Basisklasse einbinden.
-
Am besten mal ein Code Beispiel:
// Base.hpp class Base { public: Base(int i); }; // Base.cpp #include "Base.hpp" Base::Base(int i) { } // Derived.hpp #include "Base.hpp" class Derived : public Base { public: Derived(int i, int c); }; // Derived.cpp #include "Derived.hpp" Derived::Derived(int i, int c) : Base(i) { }Jetzt verständlich?
Grüssli
-
Pille456 schrieb:
Ich habe nun zwei Header Dateien und Zwei CPP Dateien. MyClass.h/.cpp und MySubClass.h/.cpp. MyClass vererbt an MySubclass.
Was muss ich nun wo einbinden?In MySubClass.h muß die Datei MyClass.h includiert werden.
-
Hmm komisch, genauso hab ich das gemacht!
Hier mal der Original Code://Vector.h class Vector { public: Vector(double pXKoord, double pYKoord, double pZKoord); //usw.. }; //Vector.cpp #include "Vektor.h" Vector::Vector(double pXKoord, double pYKoord, double pZKoord) { //machwas(); } //usw... //GraphicObject.h #include "../Vector/Vector.h" class GraphicObject: public Vector { public: GraphicObject(double pXKoord, double pYKoord, double pZKoord, double pSpeed); //usw... }; //GraphicObject.cpp #include "GraphicObject.h" GraphicObject::GraphicObject(double pXKoord, double pYKoord, double pZKoord, double pSpeed) :Vector(pXKoord, pYKoord, pZKoord) { //machwas(); }
-
Wenn Du nun noch beim Linken alle beteiligten Dateien angibst, und es dann nicht funktioniert, weiß ich auch nicht weiter.
Der Code sieht gut aus.
-
So ...
ich habe mir mal die vier Dateien angelegt, und Deinen Code jeweils da hineinkopiert.
Zunächst konnte ich die Datei vector.cpp nicht kompilieren, da in der include-Instruktion nicht vector.h, sondern vektor.h steht ... hat gedauert, bis ich das festgestellt habe.
Nachdem ich das berichtigt habe, konnte ich die beiden Dateien kompilieren und auch mit einem Hauptprogramm, in dem einfach nur ein Objekt der Klasse GraphicObject erzeugt wird, linken --->cl prog.cpp vector.cpp graphicobject.cpp
ergibt prog.exe
alles wunderbar ...#include "graphicobject.h" int main(void) { GraphicObject go(5, 3, 4, 8); }
-
Hmm, ja komischer wirwarr.. Naja ich hab alle Dateien nochmal komplett neu organisiert und ein neues Projekt erstellt und siehe da es geht. Danke!
-
Du hast Schreibfehler drin.
Die Datei heisst Vector.h, du inkludierst aber Vektor.h
Blödes Englisch, gell?
-
Ich würde die Datei aber nicht fast gleich nennen wie den Standardheader <vector>...