Klasse braucht Klasse die wiederum die erste Klasse brauch = error C4430, oder ?
-
Moin,
Ich habe eine Klasse A die eine Instanz erzeugt von einer Klasse B die eine Methode
enthält die als Parameter ein Object von Typ A hat. Da eine Klasse immer vor der
anderen kommt weiß anscheinend der Compiler mit dem Namen der anderen Klasse in der
einen Klasse nichts anzufangen. Ist auch nur eine Vermutung da , wenn ich die
ensprechenden Methoden entferne, das Compelieren funktioniert.
Wenn diese Vermutung zutrifft wie umgehe ich das?
Bei Google & Co...find ich nichts demenstrechendes was zu dem Problem passt und die
Forum suche ist auch immoment irgentwie...komisch.MFG Todd Strasser :xmas1:
-
Morton Rhue schrieb:
Moin,
Ich habe eine Klasse A die eine Instanz erzeugt von einer Klasse Balso
#ifndef A_HPP #define A_HPP #include "B.hpp" class A{ B data; ... }; #endifdie eine Methode enthält die als Parameter ein Object von Typ A hat.
reicht referenz auf A?
#ifndef B_HPP #define B_HPP class A; class B{ void foo(A& a); }; #include "A.hpp" inline void B::foo(A& a){ a.bar(); } #endif
-
Geht ohne Probleme, solange nicht beide Klassen inline sind. Das ist dann z.B. bei 2 Template-Klassen schwierig. Aber sonst, einfach ein
class A;vor Klasse B und vice versa. In deiner A.cpp bzw B.cpp beide Header-Dateien einbinden.
-
Vielen Dank!
MFG Todd Strasser :xmas2:
-
Badestrand schrieb:
Das ist dann z.B. bei 2 Template-Klassen schwierig.
Ach, das ist auch nicht wirklich ein Problem - du kannst auch bei Template-Klassen die Implementation auslagern (nicht ganz so weit wie bei normalen Klassen, aber weit genug):
template<typename T> class A; template<typename T> class B { public: void setValue(const A<T>& v); }; #include "A.HPP" template<typename T> inline void B<T>::setValue(const A<T>& v) {...}
-
Achso, hey danke!! Werd dann grad mal ein, zwei Sachen bei mir umprogrammieren
:xmas1: