Warum funktioniert dieser Code nicht?Dynamische Umwandlung bei Verwendung von dynamic_pointer_cast nicht möglich
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
bekomme ich folgende Fehlermeldung:
/usr/include/c++/4.6/bits/shared_ptr.h:386: error: cannot dynamic_cast '(& __r)->std::shared_ptr<Event>::<anonymous>.std::__shared_ptr<_Tp, _Lp>::get [with _Tp = Event, __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]()' (of type 'class Event*') to type 'class TrackerEvent*' (source type is not polymorphic)
TrackerEvent
erbt von Event
also denke ich, das Problem ist, dass ich nicht in diese Richtung werfen können. Aber ep->pop()
kann entweder ein Objekt vom Typ Event
oder TrackerEvent
zurückgeben. Und ich habe gehofft, dass, wenn ich versuche, es zu TrackerEvent
zu werfen und es gibt NULL
würde ich wissen, ob ich ein Event
oder TrackerEvent
habe ...
Wie würde ich das tun?
Sie müssen habe mindestens eine virtuelle Methode, um dynmaic_cast zu verwenden. – stardust