Vorwärtsdeklartion (mit typedef)?
-
a.h ... #include<a.B> class A; typedef boost::shared_ptr<A> APtr; class A { public: BPtr get(); ... b.h #include<a.h> ... class B; typedef boost::shared_ptr<B> BPtr; class B : public A { ...Die gegenseitgen Anhängigkeiten führen zu logischerweis hier zu Übersetzungsfehlern. In der Regel läßt es sich vermeiden indem man den typedef vor einen bestimmten include durchführt.
Das Problem erscheint derzeit beim Umstellen von Raw-Pointern, bei der die Vorwärtsdeklaration der Klasse ausreichend ist, auf shared-Pointer.
Kann man das Problem irgendwie anders lösen?
Da ich in den Klassen bereits mit den typedefs arbeite soll der typedef auch vor der Klassendeklaration durchgeführt werden.Gruß,
SirAnn
-
boost::shared_ptr<X> benötigt keinen vollständigen Typen bei der Instantiierung. Die Verwendung anstelle von rohen Zeigern sollte also problemlos möglich sein.
-
Hi camper
das ist korrekt (sonst würde meien vorwärtsdeklaration im Bsp auch nicht funktionieren).mein Problem ist eher das, dass ich in ausschließlich mit den typedefs arbeiten möchte und diese auch in der jeweiligen Klassendeklaration unterbringen möchte.
und eine Vorwärtsdeklaration a la
class APtr;resultiert in einem "alredy defines APtr
-
Ich bin nicht sicher, ob ich das Problem richtig verstanden habe - aber evtl. könntest du a.h und b.h aufteilen, indem du den rein deklaratorischen Teil ausgliederst, ungefähr so:
a_fwd.h class A; typedef boost::shared_ptr<A> APtr; a.h #include "a_fwd.h" #include "b_fwd.h" class A { public: BPtr get(); ... b_fwd.h class B; typedef boost::shared_ptr<B> BPtr; b.h #include "b_fwd.h" #include "a.h" class B : public A { ...ungefähr so, wie es <ios> und <ios_fwd> gibt.
-
ah, verstehe. okay! so kann ich es natürlich lösen.
danke!