不同类中的枚举不兼容?
所以我在做一个游戏,我有一个有哪个方向,玩家目前所面临的,向上的枚举,留下了一个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;
};
我也有一个魔法类,我会从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
和Spell
的名称空间或基类。
回答:
不要在不相关的类中声明两次枚举类。你可以在类之外定义它。如果你仍然需要它在拼写类下,使其公开,其他类可以看到它。
class Spell {
public:
enum Direction {up, left, down, right, upLeft, upRight, downLeft, downRight};
};
class Fireball : public Spell
{
public:
void updateFireballs(Spell::Direction fireballDir);
};
class Player
{
Fireball fireballs;
void update()
{
fireballs.updateFireballs(playerDir);
}
private:
Spell::Direction playerDir;
};
以上是 不同类中的枚举不兼容? 的全部内容, 来源链接: utcz.com/qa/264984.html