概述
当使用dynamic_cast进行类型转换的时候,出现以下报错:
error C2683: “dynamic_cast”:“BattleElement”不是多态类型
note: 参见“BattleElement”的声明
源码实例:
定义父类:
class BattleElement {
public:
BattleElement();
~BattleElement();
}
BattleElement::BattleElement() {
}
BattleElement::~BattleElement() {
}
子类:
class PolygonBattleElement :public BattleElement {
public:
PolygonBattleElement();
~PolygonBattleElement();
};
PolygonBattleElement::PolygonBattleElement()
:BattleElement() {
}
PolygonBattleElement::~PolygonBattleElement() {
}
使用:
BattleElement* elemt = new PolygonBattleElement;
PolygonBattleElement* polygonElem = dynamic_cast<PolygonBattleElement*>(elemt);
当编译的时候,就出现以上的问题!
我也是子类继承父类,但是在转换的时候,为什么出现不是多态这样的问题呢?原因是:dynamic_cast必须使用虚继承表,而虚继承表实现的前提是父类中必须要有虚函数。因为上面的父类中没有虚函数,所有就会出现上面的问题。
解决:在父类中添加一个虚函数即可!
修改之后的父类:
class BattleElement {
public:
BattleElement();
~BattleElement();
virtual void doSth();
}
BattleElement::BattleElement() {
}
BattleElement::~BattleElement() {
}
void BattleElement::doSth() {
}
编译成功!
aaa
最后
以上就是激昂冬日为你收集整理的dynamic_cast:“XXX”不是多态类型的全部内容,希望文章能够帮你解决dynamic_cast:“XXX”不是多态类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复