还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

error: cannot dynamic_cast ‘b’ (of type ‘class Base*’) to type ‘class Derived<int>*’ (source type is not polymorphic)

来源:清泛原创     2016-10-24 17:45:39    人气:     我有话说( 0 人参与)

在将父类型转换为子类型时,可以使用static_cast和dynamic_cast.如果使用dynamic_cast,它要求父类必须为多态的,即要求至少有一个虚函数,因此...

在将父类型转换为子类型时,可以使用static_cast和dynamic_cast.如果使用dynamic_cast,它要求父类必须为多态的,即要求至少有一个虚函数,因此需要仔细检查类定义中有无虚函数,例如可以将析构函数设置为虚函数.

更正后的代码为(来自: c++ - converting a base class pointer to a derived class pointer)

#include <iostream>
using namespace std;

class Base {
public:
  Base() {};
 virtual  ~Base() {}; // make it polymorphic
};

template<class T>
class Derived: public Base {
  T _val;
public:
  Derived() {}
  Derived(T val): _val(val) {}
  T raw() {return _val;}
};

int main()
{
  Base * b = new Derived<int>(1);
  Derived<int> * d = dynamic_cast<Derived<int>* >(b);
  cout << d->raw() << endl;
  return 0;
}

dynamic_cast

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: