0

Why do I get compilation error when I try to dynamic_cast the A* to B*. I get the below error:

error: cannot dynamic_cast ‘ptr’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
     if(B *ptrb = dynamic_cast<B*>(ptr))

Code as below:

class A
{
    public:
    A(){cout<<"A";}
    ~A(){}
    void print(){cout<<"A";}
};

class B: public A
{
    public:
    B(){cout<<"B";}
    void print(){cout<<"B";}
};

class C: public A
{
    public:
    C(){cout<<"C";}
    void print(){cout<<"C";}
};

int main()
{

    int x;

    cin>>x;

    A* ptr;

    if(x==1)
    {
        ptr= new B;
    }
    else
    {
        ptr = new C;
    }
    
    if(B *ptrb = dynamic_cast<B*>(ptr))
    {
        ptrb->print();
    }
    else if(C *ptrc = dynamic_cast<C*>(ptr))
    {
        ptrc->print();
    }
    return 0;
}
user17732522
  • 53,019
  • 2
  • 56
  • 105
Deb_Ray
  • 1
  • 1
  • 3
    Does this answer your question? [Getting "source type is not polymorphic" when trying to use dynamic\_cast](https://stackoverflow.com/questions/15114093/getting-source-type-is-not-polymorphic-when-trying-to-use-dynamic-cast) or [Can't downcast because class is not polymorphic?](https://stackoverflow.com/questions/8469900/cant-downcast-because-class-is-not-polymorphic) – user17732522 Mar 11 '22 at 02:24
  • I guess may be class is not polymorphic that is why its a problem. I tried adding a virtual method, then it worked fine. – Deb_Ray Mar 11 '22 at 16:55

0 Answers0