Klassen ineinader verfügbar machen [gelöst]
-
Hallo Leute,
zuerst möchte ich mich mal für den Titel entschuldigen aber eine bessere Problembeschreibung ist mir nicht eingefallen.
Problem:
Mein Problem ist, die Kommunikation zwei Klassen-Instanzen untereinander. Nennen wir Sie
CKlasse_1 und CKlasse_2
Nun kann ich Klasse_1 einen Zeiger auf eine Instanz der Klasse_2 übergeben, um die Methoden von Klasse_2 aufzurufen. Um diesen Zeiger zu übergeben, includiere ich den Header der Klasse_2 im Header der Klasse_1 und erstelle eine Init-Funktion mit dem Argument: CKlasse_2* m_pKlasse2
Das alles funktioniert auch.
Nun würde ich das gleiche Spiel aber auch anders rum machen. Also in Klasse_2 möchte ich Methoden der Klasse_1 aufrufen können. Aber Sobald ich den Header der Klasse_1 einbinde, entsteht eine Art Endlosschleife.
Vielleicht könnte sich jemand die Zeit nehmen und mir kurz erklären, wie ich dieses Problem lösen kann. Sollte ich etwas zu ungenau beschrieben haben, werd ich ein Beispiel nach reichen.
Vielen Dank für eure Hilfe.
-
drzi schrieb:
...Aber Sobald ich den Header der Klasse_1 einbinde, entsteht eine Art Endlosschleife.
Stichworte sind Includeguards und Forward Declaration.
-
#ifndef _CKLASSE_H_ // include guard #define _CKLASSE_H_ class CKlasse_2; // forward declaration class CKlasse_1 { public: void init(CKlasse_2 *ckl2); }; class CKlasse_2 { public: void init(CKlasse_1 *ckl1); }; #endif
-
Vielen Dank. Dass war genau das, was ich gesucht habe. Im Netz gab es auch einige Beiträge um sich den Hintergrund anzulesen. Ich muss zugeben, ich habe diesen include-guard bisher immer verwendet, ohne zu wissen, wofür er eigentlich da ist.
Eine Frage noch, man spricht ja immer von standardisiertem Code. Ist dies ein legitimes Mittel um das Ziel zu erreichen, oder mehr ein "hack" vergleichbar mit "extern" zum golbalen deklarieren. Irgendwo habe ich gelesen, das es zwar funktioniert, aber nicht verwendet werden soll.
Danke noch mal für eure Hilfe.
bye
-
ist legitim
wo liest man denn so was? Oo
-
Vielleicht hat er hat er allgemein Makros gemeint, die teilweise missbraucht werden und recht fehleranfällig/typunsicher sein können...
Wie auch immer, Include Guards gehören definitiv nicht zu der Sorte.