仅仅因为我不知道在我的c ++书中或谷歌上究竟在哪里查找。我如何在类中实际定义一些枚举(在本例中为{ left=1, right=2, top=3, bottom=4 }
)。我希望能够将此枚举作为参数传递给成员函数而不是整数,因此在外部使用枚举...
有没有办法可以做到这一点,还是有更好的方式我可以只针对该类进行枚举?
以下是无效的代码,出于某种原因说enum mySprite::<unamed> myySprite::side member mySprite "mySprite::side" is not a type name
:
class mySprite : public sf::Sprite
{
public:
enum{left=1, right=2, top=3, bottom=4} side;
float GetSide(side aSide){
switch(aSide){
// do stuff
}
};
};
答案 0 :(得分:6)
使代码工作所需的最简单的更改是:
class mySprite : public sf::Sprite
{
public:
enum side{ left=1, right=2, top=3, bottom=4 };
float GetSide(side aSide)
{
switch(aSide)
{
// do stuff
// add breaks; as appropriate
case left:
case right:
case top:
case bottom:
}
}
};
你也可以这样做:
typedef enum {left = 1, right, top, bottom} side;
这意味着为mySprite
类定义匿名枚举类型,并使side
别名有效地完成与上面代码相同的操作。对于简洁性,只需要为第一个枚举值分配一个起始整数。除非您明确指定其他内容,否则在该点之后的所有值都被理解为每次增加1。
答案 1 :(得分:1)
我认为这个例子解释了这一切:
class A {
public:
enum directions { top, left, right, bottom }; // directions is the type
// of the enum elements
void f(directions dir) {
if (dir == left) {
// ...
} else {
// ...
}
}
};
A object;
object.f(A::top);
答案 2 :(得分:-1)
您需要将其定义为在类外使用它和/或强类型参数的类型。否则,它只是被定义为int
,其访问修饰符也必须是公共的:
class foo {
public:
typedef enum DIRECTION {
LEFT = 1,
RIGHT,
TOP,
BOTTOM,
};
void SetDirection(foo::DIRECTION dir) {
_direction = dir;
}
//...
protected:
//...
private:
foo::DIRECTION _direction;
//...
};
int main() {
//...
foo bar;
bar.SetDirection(foo::BOTTOM);
//...
}