使用dynamic_cast报错source type is not polymorphic

 #include
 using namespace std;
 class C{
  public:
  virtual ~C(){}////////////必须要加一个虚函数,不然就会报以下错误,
 };
 class A:public C{
 };
 class B:public C{
 };
int main(){
C* pa=new A();
B* pb=dynamic_cast(pa);
if(pb)
cout<<"success!";
else
cout<<"fail!";

}

[Error] cannot dynamic_cast 'pa' (of type 'class C*') to type 'class B*' (source type is not polymorphic)


1.基类指针pa指向子类对象,A类和B类实际并无关系,所以是两个无关的类做dynamic_cast,pb为null,所以最终运行结果为:fail!

2.dynamic转换的类需要加一个虚函数。任意一个虚函数都可以。

你可能感兴趣的:(c++)