不同类中的枚举不兼容?

所以我在做一个游戏,我有一个有哪个方向,玩家目前所面临的,向上的枚举,留下了一个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功能,它抱怨说,它不能“球员::方向”转化为“拼写::方向”。

如何将不同类中的枚举作为另一个类中的函数的参数传递?

回答:

每个枚举都是它自己的类型。当你在不同的类中定义两个枚举时,你定义了两种类型。他们可能有相同的成员名称,但他们是不相关的。

当你需要一个通用的枚举定义一个。如果你发现这个枚举会有名字冲突,你应该为它定义一种“容器”。这可以是您的类PlayerSpell的名称空间或基类。

回答:

不要在不相关的类中声明两次枚举类。你可以在类之外定义它。如果你仍然需要它在拼写类下,使其公开,其他类可以看到它。

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

回到顶部