【发布时间】:2014-02-17 17:36:08
【问题描述】:
所以我正在制作一个游戏,我有一个 Player 类,它有一个枚举玩家当前面向的方向、向上、向左等。
Player.h
#include "Fireball.h"
class Player
{
// Some stuff
Fireball fireballs;
void update();
private:
enum direction {up, left, down, right, upLeft, upRight, downLeft, downRight} playerDir;
};
我还有一个 Spell 类,我将从中派生特定的法术,例如 Fireball。 Spell 类有一个与 Player 类中的枚举相同的枚举,因为我希望能够在更新咒语实例时将玩家的当前方向作为参数传递,并在其中移动咒语方向。
Spell.h
class Spell
{
// Some stuff
protected:
enum direction {up, left, down, right, upLeft, upRight, downLeft, downRight};
};
.
Fireball.h
#include "Spell.h"
class Fireball : public Spell
{
public:
void updateFireballs(direction fireballDir);
};
.
Player.cpp
#include "Player.h"
void Player::update()
{
fireballs.updateFireballs(playerDir);
}
当我尝试将 playerDir 作为参数传递给 updateFireballs 函数时,它抱怨它无法将“Player::direction”转换为“Spell::direction”。
如何将来自不同类的枚举作为不同类中函数的参数传递?
【问题讨论】:
-
为什么要在两个类中定义单独的枚举,尤其是如果您想互换使用它们时?在两个类之外有一个共同的定义会更有意义。
-
即使你在 Player 类之外定义了
direction,在里面你仍然可以说using direction = ::direction;使Player::direction成为全局direction的同义词。但也许你有类似class Map的东西——方向通常属于地图。
标签: c++ inheritance enums