Perché questo codice non funziona?Impossibile eseguire il cast dinamico quando si utilizza dynamic_pointer_cast
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
ottengo il seguente errore:
/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
eredita da Event
quindi credo che il problema è che non riesco a lanciare in questa direzione. Ma ep->pop()
potrebbe restituire un oggetto di tipo Event
o TrackerEvent
. E speravo che quando provo a lanciarlo a TrackerEvent
e ritorna NULL
Vorrei sapere se ho un Event
o TrackerEvent
...
Come potrei farlo?
È necessario avere almeno un metodo virtuale per utilizzare dynmaic_cast. – stardust