Include Probleme bei Vector aus Kindinstanzen
-
Hallo Leute,
seit gestern Nachmittag habe ich ein Problem bei dem ich nicht weiter komme.
Ich möchte in in einer Klasse, die als mutterklasse für eine weite Klasse
dient, einen Vector anlegen der Referenzen auf Objekte der Kindklasse enthält.
Leider bekomme ich Probleme mit dem Compiler, da ich nicht weiß in was für einer Reihen folge ich was inkludieren kann/ muss.
Würde mich freuen wenn mir da jemand aus der Patsche helfen kann.Grüße
Mojo Zache
-
Du kannst nur Zeiger auf die Objekte im Vector ablegen.
#include <vector>
und
class Basisklasse;
sollten genügen
-
Ja das mit den Zeigern weiß ich, auch der Vector an sich ist auch kein Problem.
Nur habe ich das Problem das wenn ich das den Vector gleich so definiere das
er Die Objekte gleich enthält muss er den Header der Kindklasse vor her includiert werden,
was er aber nicht kann da der Vector in dem Header der Mutterklasse definiert wird.Und ich wollte jetzt wissen ob da jemand eine Lösungsmöglichkeit dafür kennt.
-
Mojo.Zache schrieb:
Ja das mit den Zeigern weiß ich, auch der Vector an sich ist auch kein Problem.
Nur habe ich das Problem das wenn ich das den Vector gleich so definiere das
er Die Objekte gleich enthält muss er den Header der Kindklasse vor her includiert werden,
was er aber nicht kann da der Vector in dem Header der Mutterklasse definiert wird.Und ich wollte jetzt wissen ob da jemand eine Lösungsmöglichkeit dafür kennt.
Zeig Code.
-
OK!
Mutterklasse:
Header:#pragma once #include "stdafx.h" //#include "WF.h" class WorkFlowOraniser { public: WorkFlowOraniser(void); virtual ~WorkFlowOraniser(void); void AddFlowElement(string Name, int Place); private: string WFName; vector <WF*> *v_WorkFlow; public: void NewWF(void); };Cpp:
#include "stdafx.h" #include "WorkFlowOraniser.h" #include "WF.h" WorkFlowOraniser::WorkFlowOraniser(void) { WFName= "SomeName"; //MessageBoxA(0,"I am here ya dweep!","Work Flow Flag",0); v_WorkFlow->resize(1); //v_WorkFlow->empty(); } WorkFlowOraniser::~WorkFlowOraniser(void) { } void WorkFlowOraniser::AddFlowElement(string Name, int Place) { // add some elemet 2 vector //v_WorkFlow-> } void WorkFlowOraniser::NewWF(void) { // create new Vector }KindKlasse
Header#pragma once #include "workfloworaniser.h" #include "stdafx.h" //#include "workfloworaniser.h" class WF : public WorkFlowOraniser { public: WF(void); WF(int); ~WF(void); int i_Num; };Cpp: - auch wenn sie noch keine funktionalität erfüllt
#include "stdafx.h" #include "WF.h" WF::WF(void) { } WF::~WF(void) { } WF::WF(int iNumber) { i_Num= iNumber; }
-
1. Forward Delk. nutzen.: in Header File einfach class WF; schreiben.
Inklidueren von WF.h dann in cpp.
2. vector <WF*> *v_WorkFlow; würde ich nicht als Pointer machen (warum auch), sondern vector <WF*> v_WorkFlow; dann sparst Du dir das new und das delete des vectors.Simon
-
Sorry wegen der Späten Antwort… kam eine Besprechung dazwischen

Ok das mit dem Vector sehe ich ein. Aber was meinst da mit:
simon.gysi schrieb:
1. Forward Delk. nutzen.: in Header File einfach class WF; schreiben.
-
Mojo.Zache schrieb:
Sorry wegen der Späten Antwort… kam eine Besprechung dazwischen

Ok das mit dem Vector sehe ich ein. Aber was meinst da mit:
simon.gysi schrieb:
1. Forward Delk. nutzen.: in Header File einfach class WF; schreiben.
Schon einmal google oder die Forensuche bemüht, oder einfach mal in ein C++ Buch geschaut? Forward Declaration ist eine sehr grundlegende C++ Technik.
Sehr kurze Erklärung:
In einem Header benötigst du in der Regel kein Include wenn du nur Zeiger oder Referenzen verwendest (Dann ist das Include erst in der Definition nötig):
class WF;Ist eine solche Forward Declaration.
cu André
-
Danke für die erklärung und die Geduld.
