当使用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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复