我遇到以下代码的问题,重写虚拟函数未执行。不知道我在这里做错了可能是一个愚蠢的错误。反正这是一个游戏项目,我有对象的数组,看起来像这样(核心::阵列是Irrlicht的阵列,类似于矢量阵列)如何在C++中正确使用虚拟成员函数
core::array<GameObject> gameTargets;
这是GameObject
和Zombie
定义
class GameObject {
protected:
scene::ISceneNode* node;
public:
int ID;
int hitpoints;
GameObject() {
...
};
void setNode(scene::ISceneNode* inode) {
...
}
virtual void shot(int dmg) {
... [BREAKPOINT HERE]
}
scene::ISceneNode* getNode() {
return node;
}
};
class Zombie : public GameObject {
public:
static const enum Animation {
ZOMBIE_WALK,
ZOMBIE_HURT,
ZOMBIE_DIE,
ZOMBIE_TWITCH,
ZOMBIE_ATTACK,
ZOMBIE_IDLE
};
//We only want to accepted animated mesh nodes for this object
Zombie(int hp, scene::IAnimatedMeshSceneNode* inode) {
...
}
//Override the shot function
void shot(int dmg) {
... [BREAKPOINT HERE]
}
//Animate the zombie
void setAnimation(Animation anim) {
...
}
};
派生类的成员函数永远不会被调用,我创建的对象这样
Zombie target(hp, (scene::IAnimatedMeshSceneNode*)node);
,并呼吁像这样
for(int i = 0; (u32)i<level->gameTargets.size(); i++) {
if(selectedNode == level->gameTargets[i].getNode()) {
level->gameTargets[i].shot(b->damage);
}
}
其中b是一个指向子弹用int变量破坏和gameTargets虚函数包含游戏对象
行数组如果声明无效僵尸::拍摄(会发生什么诠释)为虚拟?你使用什么编译器? – Joel 2012-04-19 14:15:18
我正在使用visual express C++,我尝试在派生类中使用虚函数,但它没有工作,我怀疑它正在切片在 – 2012-04-19 14:18:04
下面给出的答案@DannyBirch:在派生类中使用'virtual'关键字没有什么区别,如果你愿意,你也可以忽略它。重要的是它在基类中是“虚拟”的。 – 2012-04-19 14:24:00