如何使用枚举检查这种情况 - C ++

时间:2015-03-17 00:32:53

标签: c++ enums

班级方向

class Direction
{
public:
 enum value
 {
  UP,
  RIGHT,
  DOWN,
  LEFT,
  STAY
 };
};   

Class Point

 #include "Direction.h"
        class Point {

         int x , y;

        public:

         Point() { x=0; y=0; };
         Point(int x1 , int y1) : x(x1) , y(y1) {};
         void setX(int newX) { x = newX; };
         void setY(int newY) { y = newY; };
         int getX() { return x; }
         int getY() { return y; }
         void move(Direction d) {
          if(d==UP);
        };

问题是if(d==UP)我不明白如何检查我收到错误检查的条件。

有什么想法吗? 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:8)

UPclass Direction内声明,因此在该范围之外,您应该编写Direction::UP来引用它:

if (...something... == Direction::UP)
    ...

您的Direction类会创建value枚举类型,但还没有任何数据成员,因此不清楚d中您可能要与{{1}进行比较的内容}}。您可以通过在Direction::UP中的最终};之前插入一条额外的行来添加数据成员:

class Direction

然后你的比较将成为:

value value_;

所有这一切,如果你的if (d.value_ == Direction::UP) ... 不会包含除class Direction以外的任何内容,你可以考虑完全删除类部分,只是单独声明枚举:

enum

然后您的比较将简化为:

enum Direction { UP, ... };

答案 1 :(得分:3)

我认为您不需要创建课程Direction。简单的枚举就足够了。

enum class Direction
{
    UP,
    DOWN,
    LEFT,
    RIGHT,
    STAY,
};

然后你可以写下类似的功能:

void do_move(Direction d)
{
    switch (d) {
    case Direction::LEFT:
        cout << "LEFT" << endl;
        break;
    case Direction::RIGHT:
        cout << "RIGHT" << endl;
        break;
    case Direction::UP:
        cout << "UP" << endl;
        break;
    case Direction::DOWN:
        cout << "DOWN" << endl;
        break;
    case Direction::STAY:
        cout << "STAY" << endl;
        break;
    default:
        break;
    }
}

简单地称之为:

Direction d = Direction::UP;
do_move(d);
do_move(Direction::STAY);

答案 2 :(得分:2)

你真正想要的是Direction是一个枚举,而不是一个类:

enum Direction { UP, RIGHT, DOWN, LEFT, STAY };

现在您可以像这样简单地致电move

move(UP);

您的if(d==UP);将按预期工作。

答案 3 :(得分:2)

我注意到你的Direction课程中除了枚举之外没有任何内容,在这种情况下你可以简单地说:

enum class Direction {
  UP,
  ...
};

不同之处在于enum class枚举将被封装在其中。您仍然需要执行if (d == Direction::UP)

如果你把它作为常规枚举:

enum Direction {
  UP,
  ...
};

然后,您可以像原始代码一样直接if (d == UP)

此外,通过这种方式,您可以Direction dvalue dDirection::value d更加引人注目。

您现在拥有的是常规枚举,它未封装在value中,但封装在Direction所在的value类中。您只能在Direction内直接处理它,但除此之外,您必须指定封装类的范围。

答案 4 :(得分:0)

if(d.value == UP)

d类型class Direction不属于Enum value类型。 因此,您无法比较d和`UP