c++ - Cannot dynamic cast when using dynamic_pointer_cast -
why code not work?
std::shared_ptr<event> e = ep->pop(); std::shared_ptr<trackerevent> t; t = std::dynamic_pointer_cast<trackerevent>(e);
i following error:
/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*') type 'class trackerevent*' (source type not polymorphic)
trackerevent
inherits event
guess problem can't cast in direction. ep->pop()
might either return object of type event
or trackerevent
. , hoping when try cast trackerevent
, returns null
know whether have event
or trackerevent
...
how that?
the compiler telling going on @ end of message:
(source type not polymorphic)
your event
base class needs have @ least 1 virtual
member function (i.e. polymorphic type) in order allow dynamic casts. make destructor of event
virtual:
class event { public: virtual ~event() { /* whatever goes here, or nothing... */ } // ... };
here live example polymorphic types, showing code compiles (removing virtual destructor cause compilation error similar 1 seeing).
as correctly mentioned luc danton in comments, defaulted version of virtual destructor can defined way (if compiler c++11-compliant in respect):
class event { public: virtual ~event() = default; // ... };
Comments
Post a Comment