Wechselseitige Friend Deklarationen
-
Hallo,
hätte vielleicht jemand einen Tip fuer folgendes Problem:
2 Klassen sollen gegenseitig auf ihre Private-Daten zugreifen können.
Eine Friend-Deklaration geht aber nur unter der Vorraussetzung, dass dem Compiler die Klasse samt Funktionsprototypen bekannt ist.
Die Pointertypen können ja noch durch die ersten beiden Zeilen realisiert werden, aber wie deklariere ich eine MemberFunktion, dessen Klassenstruktur erst später deklariert wird.#include <iostream> #include <string> using namespace std; class C2; class C1; void C2::SpyClass(C1* p_C1); //Ist wohl nötig fuer Zeile ***, aber unmöglich // wegen den hier noch unbekannten Scope "C2::" class C1 { int i1; public: void SpyClass(C2* p_C2); friend void C2::SpyClass(C1* p_C1); //Zeile *** //ihm ist unbekannt, wie C2 definiert ist }; class C2 { int i2; public: void SpyClass(C1* p_C1); friend void C1::SpyClass(C2* p_C2); }; void C1::SpyClass(C2* p_C2) {p_C2->i2 = 5;}; void C2::SpyClass(C1* p_C1) {p_C1->i1 = 35;}; int main() { C1 x1; C2 x2; return 0; }
Also, wie bitte krieg ich hier den Knoten raus ?
EDIT: Ich erkannte gerade, wenn ich in C1 die ganze Klasse C2 als Friend deklariere, schluckts der Compiler, da er ja offensichtlich keine Probleme damit hat, wenn man nur sagt "friend C2;". Mich würde das aber trotzdem noch interessieren, wie man nur bestimmte Funktionen freigeben kann.
-
Wenn die eine Klasse komplett auf die Daten der anderen zugreiffen können soll, dann funzt das so:
#include <iostream> #include <string> using namespace std; class C2; class C1; class C1 { friend class C2; int i1; public: void SpyClass(C2* p_C2); }; class C2 { friend class C1; int i2; public: void SpyClass(C1* p_C1); }; void C1::SpyClass(C2* p_C2) {p_C2->i2 = 5;}; void C2::SpyClass(C1* p_C1) {p_C1->i1 = 35;}; int main() { C1 x1; C2 x2; return 0; }
Gruß
Entyl Sa
-
Danke Entyl_Sa,
bin ich just in dem Moment auch drauf gekommen ;).