不同类中的枚举不兼容?
所以我在做一个游戏,我有一个有哪个方向,玩家目前所面临的,向上的枚举,留下了一个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


