不同类中的枚举是不兼容的?

时间:2014-02-17 17:36:08

标签: c++ inheritance enums

所以我正在制作一个游戏,我有一个玩家类,其中包含玩家目前面向,向上,向左等方向的枚举。

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 :: direction'转换为'Spell :: direction'。

如何将来自不同类的枚举作为不同类中函数的参数传递?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

不要在不相关的类中声明枚举类两次。您可以在类之外定义它。如果您仍然希望它在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;
};
相关问题