我是靠谱客的博主 激昂冬日,最近开发中收集的这篇文章主要介绍dynamic_cast:“XXX”不是多态类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当使用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”不是多态类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部