Dlaczego ten kod nie działa?Nie można rzutować dynamicznie podczas używania dynamic_pointer_cast
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
pojawia się następujący błąd:
/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
dziedziczy z Event
więc myślę, że problem jest, że nie mogę rzucić w tym kierunku. Ale ep->pop()
może zwrócić obiekt typu Event
lub TrackerEvent
. I mam nadzieję, że kiedy próbuję oddać go do TrackerEvent
i zwraca NULL
mam wiedzieć czy mam Event
lub TrackerEvent
...
Jak to zrobić? Aby uzyskać numer
Musisz mieć co najmniej jedną wirtualną metodę używania dynmaic_cast. – stardust