我在尝试将一个类向下转换为另一个类以访问该类的特定方法时遇到了几个问题。这是我目前的课程计划:
游戏对象类:
class GameObject
{
...
}
敌人等级:
#include "../GameObject.h"
class Enemy : public GameObject
{
Enemy(Type type);
virtual ~Enemy();
virtual int receiveDamage(int attack_points);
virtual void levelUp() = 0;
...
protected:
char *name_;
int level_;
int health_;
int max_health_;
int attack_;
int armor_;
}
小地精类:
#include "../Enemy.h"
class SmallGoblin : public Enemy
{
public:
SmallGoblin();
~SmallGoblin();
void levelUp();
}
在我的代码中,我尝试这样做并且每次都会抛出一个 std::bad_cast 异常。
class Player : GameObject
{
...
virtual void attack(GameObject &enemy)
{
try
{
Enemy &e = dynamic_cast<Enemy&>(enemy);
e.receiveDamage(attack_points_);
}
catch(const std::bad_cast& e)
{
std::cerr << e.what() << '\n';
std::cerr << "This object is not of type Enemy\n";
}
}
...
}
(enemy 是对 GameObject 对象的引用,但我知道它实际上是 SmallGoblin 对象)。
在我的代码的另一部分,我有另一个类(门),它扩展了 GameObject 类并且向下转换工作(但是,我必须使用 static_cast 而不是 dynamic_cast,我不知道为什么)。