bekannte elemente der einen in der anderen klasse
-
Hallo
es geht darum
ich habe klasse A diese hat members und methoden, in einer methode ruf ich eine methode von klasse B auf, und klasse B soll nun zugriff auf die members von klasse A haben,
ich weiss nicht wie ich das realisieren sollA.h
#include "B.h" class A{ private: B b; int i=0; void DoSomething(); };A.cpp
void A::DoSomething(){ b.doSo(); }B.h
class B{ public: void doSo(); };B.cpp
void B.doSo(){ int j = i; }ich hab schon versucht einen pointer der klasse A zu uebergeben, aber ich kann in klasse B der methode keine attribute dieser art angeben.
irgendwie steh ich da auf den schlauch
-
Die schnellste Möglichkeit wäre natürlich, B zum friend von A zu machen. Allerdings solltest du dich fragen, ob B überhaupt auf die privaten Member von A zugreifen muss oder ob man das irgendwie vermeiden kann.
-
er muss definitiv zugreifen laesst sich nicht vermeiden
das mit friend dachte ich auch so - aber in der B klasse ist klasse A die ganze zeit unbekannt - demzufolge kann ich da auf nichts zugreifen
B ist ja eine unterklasse von A
in der B.h kann ich ja nichtmal den header von klasse A inkludieren - wuerde sich logischerweise im kreis drehen daher nur fehler
-
A ist nicht unbekannt (wenn doch, brauchst du eventuell Forward Deklarationen, um die Klassen wechselseitig bekannt zu machen ;)). Aber B muß wissen, auf welches A-Objekt es zugreifen soll.
-
forward declaration geht nicht, da ich die haeder von klasse A nicht in B includieren kann
ich habe es eben mit einer kleinen solution getestet, da geht es mit dem includieren
das problem ist, in meiner app brauch ich #pragma once in der header von klasse a
wenn ich nu fuer klasse B die header von A includieren will - kennt er die klasse trotzdem nicht
-
Forward-Deklaration kannst du verwenden, anstatt den Header einzubinden:
//A.h #include "B.h" class A { public: B val;//das braucht die komplette Definition int i; void do_something(); }; //A.cpp #inlcude "A.h" void A::do_something() { val.do_it(*this); } //B.h class A;//Forward-Deklaration reicht class B { public: void do_it(A& who);//B::do_it() muß wissen, wessen Werte es ändern soll ;) }; //B.cpp #include "B.h" #include "A.h" void B::do_it(A& who) { who.i=4711; }
-
aaaaaah - genau das brauchte ich - dankeschoen {= das rettet mich {=