Verbindung zwischen Klassen?
-
Hallo!
class Interface { private: Basis* commands_[3]; }; class Basis { protected: Interface& i_; public: Basis(); ~Basis(); virtual char* getName() =0; }; class Ableitung:public Basis { public: Ableitung() {cout<<"Konstruktor Ableitung1"<<endl;}; ~Ableitung() {cout<<"Destruktor Ableitung1"<<endl;}; char* getName() {return "Ableitung";}; }; class Ableitung2:public Basis { public: Ableitung2(){cout<<"Konstruktor Ableitung2"<<endl;}; ~Ableitung2(){cout<<"Destruktor Ableitung2"<<endl;}; char* getName() {return "Ableitung2";}; };Hier sind 3 Klassen gegeben wobei sich in der ersten ein Array befindet wo alle Instanzen der Abgeleiten klassen befinden sollen! Aber wie kann ich hier zwischen den Klassen verbinden?
Bin für jede Hilfe dankbar!
mfg
-
Du drückst dich leider nicht richtig aus. Weiß daher nicht wirklich was du willst. Aber ich versuche mal anhand des COdes zu erraten, wo dein Problem liegt. Du willst anscheinen einfach auf die commands zugreifen? Dzu mußt du natürlich eine Zugriffsmethode definieren:
class Interface { private: Basis* commands_[3]; proteced: // ob es public sein soll, kann man sich streiten. Basis* get_commands() { return commands_; } };
-
Sorry, muß protected heißen!
Jedenfalls kannst du dann von den vererbenden Klassen aus auf die Commands in Interface zugreifen.
-
Also Danke erstmal aber das ist nicht ganz wie ich es gemeint hab! Ich bekomme immer so eine eigenartige Fehlermeldung bezüglich
Basis* commands_[3];Interface& i_;Und zwar es fehlt ; vor * da fehlt aber kein ; niergends!
-
hanni6al schrieb:
Also Danke erstmal aber das ist nicht ganz wie ich es gemeint hab! Ich bekomme immer so eine eigenartige Fehlermeldung bezüglich
Basis* commands_[3];Interface& i_;Und zwar es fehlt ; vor * da fehlt aber kein ; niergends!
1. nirgendwo (nirgends)
2. doch - weil der typ noch nich bekannt ist...
wenn du die reihenfolge so lassen willst/musst, dann schreib dort:
class Basis* commands_[3];bb
-
Danke hat geholfen!!
Nächstes Prob:
class Basis; class Interface { private: Basis* commands_[3]; public: Interface() ; ~Interface(){}; }; class Basis { protected: Interface& i_; public: Basis(); ~Basis(); virtual char* getName() =0; }; class Ableitung:public Basis { public: Ableitung() {cout<<"Konstruktor Ableitung1"<<endl;}; ~Ableitung() {cout<<"Destruktor Ableitung1"<<endl;}; char* getName() {return "Ableitung";}; };Nächstes Problem ich kann einfach nicht das Array of Objects Pointers anlegen! Und zwar wollte ich es so machen:
Interface::Interface() { Basis* commands_[3]; }int main() { Interface::commands_[0] = new Ableitung; }Stehe auf der Leitung

mfg
-
Na, der Compiler müsste dir aber eine eindeutig verständliche Fehlererklärung liefern...

-
Bulli schrieb:
Na, der Compiler müsste dir aber eine eindeutig verständliche Fehlererklärung liefern...

Also folgende Errors kommen werde leider nicht daraus schlau:
error C2597: Ungültiger Verweis auf nicht-statischen Member 'Interface::commands_'
error C3867: "Interface::commands_": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&Interface::commands_", um einen Zeiger auf den Member zu erstellen.
error C2109: Index erfordert ein Array oder einen Zeigertyp
-
Interface::Interface() { Basis* commands_[3]; }aha?
was machst du hier?
oder besser - was willst du hier machen? was du da machst, seh ich: gar nichts
bb
-
Und wie macht man es richtig? Ich will hier das Array anlegen
-
so:
class Interface { private: Basis* commands_[3]; //hier deklarierst du es ("legst du es an") public: Interface() { //hier kannst du es füllen, z.bsp. so: commands_[0] = new Ableitung(1); commands_[1] = new Ableitung(2); commands_[2] = new Ableitung(3); } ~Interface() { for (size_t i(0), e(3); i != e; ++i) delete commands_[i]; }; };bb
-
Hallo!
Leider funktioniert das nicht!
Bekomme folgende Fehlermeldung vom Linker:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall Basis::~Basis(void)" (??1Basis@@UAE@XZ)" in Funktion "__unwindfunclet$??0Ableitung@@QAE@XZ$0".
""public: virtual __thiscall Basis::~Basis(void)" (??1Basis@@UAE@XZ)" in Funktion "__unwindfunclet$??0Ableitung@@QAE@XZ$0".
Habs so reingeschrieben:
Interface::Interface() { commands_[0] = new Ableitung; }
-
class Basis { protected: Interface& i_; public: Basis(); ~Basis(); //das hier hast du nicht implementiert - das sagt dir deine fehlermeldung doch auch... virtual char* getName() =0; };
-
Du mußt die Fehlermeldungen lesen! Für einen Anfänger sicherlich am Anfang schwer, weil es teilweise kryptisch aussieht. Aber wenn man immer nur fragt, und nicht selber liest, wird man es nie lernen.
Aber hier mal das wichtigste in Fett, wie man es liest:error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall Basis::~Basis(void)" (??1Basis@@UAE@XZ)" in Funktion "__unwindfunclet$??0Ableitung@@QAE@XZ$0".
""public: virtual __thiscall Basis::~Basis(void)" (??1Basis@@UAE@XZ)"**
in Funktion** "__unwindfunclet$??0Ableitung@@QAE@XZ$0".Übrigens, der MSVC ist schon so genial, das er dir Error-Codes ausspuckt (z.B. LNK2019) und du diese in der MSDN nachschlagen kannst:
http://msdn.microsoft.com/de-de/library/799kze2z.aspx