Andrew Tomazos Andrew Tomazos - 6 months ago 47
C++ Question

Getting "source type is not polymorphic" when trying to use dynamic_cast

struct A {};

struct B : A {};

int main()
A* a = new B();

B* b = dynamic_cast<B*>(a);


cannot dynamic_cast 'a' (of type 'struct A*') to type 'struct B*' (source type is not polymorphic)

How can I make
polymorphic? I want to safely cast it to B.

(One way is to add a dummy virtual function, but is there a better way?)


You need to make A polymorphic, which you can do by adding a virtual destructor or any virtual function:

struct A {
  virtual ~A() {}

Note that a polymorphic type should have a virtual destructor anyway, if you intend to safely call delete on instances of a derived type via a pointer to the base.