このコードはなぜ機能しませんか?dynamic_pointer_castを使用しているときに動的キャストできません。
std::shared_ptr<Event> e = ep->pop();
std::shared_ptr<TrackerEvent> t;
t = std::dynamic_pointer_cast<TrackerEvent>(e);
は、私は次のエラーを取得する:Event
から
/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
継承ので、私は、問題は、私はこの方向にキャストすることができないということですね。しかしep->pop()
は、Event
またはTrackerEvent
のオブジェクトを返すことがあります。そして私は...私はTrackerEvent
にキャストしようと、それはNULL
を返すとき、私はEvent
またはTrackerEvent
を持っているかどうか、私は知っているだろうと期待していた
私はそれをどのように行うのでしょうか?
あなたがする必要がありますdynmaic_castを使用するための少なくとも1つの仮想メソッドがあります。 – stardust