如何在类中定义枚举并从外部使用它

时间:2011-06-18 21:48:21

标签: c++ class struct enumeration

仅仅因为我不知道在我的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
        }
    };
};

3 个答案:

答案 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);
    //...
}