我无法让方法覆盖工作。现在我有一个名为 Sprite 的类和两个子类;我们称他们为 Goomba 和 Koopa。Koopas 和 Goombas 的实例存储在名为 spriteList 的 sprite 的 std::list 中,迭代器遍历此列表并调用每个 sprite 的行为() 函数。
通过将行为函数定义为 Sprite::behave(),我可以单独使用 Goombas。但是如果我尝试对 Koopas 做同样的事情,编译器会发疯,因为 Sprite::behave() 已经在 Goomba 中定义了。我究竟做错了什么?我觉得答案是一个非常简单的语法问题,但是在网上查看并没有发现与我的代码非常相似的示例。
我会粘贴一些代码,希望它会有所帮助。这不是我的确切源代码,所以对于任何拼写错误,我深表歉意。
//Sprite.h:
#ifndef SPRITE_H
#define SPRITE_H
class Sprite {
private:
float xPosition; float yPosition;
public:
Sprite(float xp, float yp);
void move(float x, float y); //this one is defined in Sprite.cpp
void behave(); //this one is NOT defined in Sprite.cpp
};
#endif
//Goomba.h:
#ifndef GOOMBA_H
#define GOOMBA_H
#include "Sprite.h"
class Goomba : public Sprite {
public:
Goomba(float xp, float yp);
void behave();
};
#endif
//Goomba.cpp:
#include "Goomba.h"
Goomba::Goomba(float xp, float yp): Enemy(xp, yp) {}
void Sprite::behave(){
Sprite::move(1, 0);
}
//Koopa.h looks just like Goomba.h
//Koopa.cpp
#include "Koopa.h"
Koopa::Koopa(float xp, float yp): Enemy(xp, yp) {}
void Sprite::behave(){
Sprite::move(-2, 1);
}