Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用enums-C++;_C++_Enums - Fatal编程技术网

C++ 如何使用enums-C++;

C++ 如何使用enums-C++;,c++,enums,C++,Enums,班级指导 class Direction { public: enum value { UP, RIGHT, DOWN, LEFT, STAY }; }; 类点 #include "Direction.h" class Point { int x , y; public: Point() { x=0; y=0; }; Point(int x1 , int y1) : x

班级指导

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

 #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);
        };
问题是
如果(d==UP)
我不明白如何检查条件,因为我在检查时收到一个错误

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

UP
是在
类方向
中声明的,因此在该范围之外,您应该编写
方向::UP
以参考它:

if (...something... == Direction::UP)
    ...
您的
Direction
类创建了
枚举类型,但还没有任何数据成员,因此不清楚在
d
中您可能要与
Direction::UP
进行比较。您可以通过在最后一个
>之前插入额外的一行来添加数据成员
类方向中

value value_;
那么你的比较就会变成:

if (d.value_ == Direction::UP)
    ...

以上所说的,如果您的代码>类方向>代码>将不包含除<代码> EnUM<代码>之外的任何东西,您可以考虑完全去除类部件,只简单地声明枚举:

enum Direction { UP, ... };
那么您的比较将简化为:

if (d == UP)
    ...

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

if (...something... == Direction::UP)
    ...
您的
Direction
类创建了
枚举类型,但还没有任何数据成员,因此不清楚在
d
中您可能要与
Direction::UP
进行比较。您可以通过在最后一个
>之前插入额外的一行来添加数据成员
类方向中

value value_;
那么你的比较就会变成:

if (d.value_ == Direction::UP)
    ...

以上所说的,如果您的代码>类方向>代码>将不包含除<代码> EnUM<代码>之外的任何东西,您可以考虑完全去除类部件,只简单地声明枚举:

enum Direction { UP, ... };
那么您的比较将简化为:

if (d == UP)
    ...
d是
类方向的类型
而不是
枚举值的类型
。 因此,您无法比较
d
和'UP'

d是
类方向的类型
而不是
枚举值的类型

因此,您无法比较
d
和'UP

我认为您不需要创建类
方向。简单的枚举就足够了

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;
    }
}

我认为您不需要创建类
方向
。简单的枚举就足够了

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
成为一个枚举,而不是一个类:

enum Direction { UP, RIGHT, DOWN, LEFT, STAY };
现在您可以像这样调用
move

move(UP);

和你的
if(d==UP)
将按预期工作。

您真正想要的是
方向
成为枚举,而不是类:

enum Direction { UP, RIGHT, DOWN, LEFT, STAY };
现在您可以像这样调用
move

move(UP);

和你的
if(d==UP)
将按预期工作。

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

enum class Direction {
  UP,
  ...
};
区别在于
enum类
枚举将封装在其中。如果(d==Direction::UP)
,您仍然需要执行

如果将其设置为常规枚举:

enum Direction {
  UP,
  ...
};
然后,如果(d==UP)
与原始代码一样,您可以直接

同样,通过这种方式,您可以得到
方向d
,它比
值d
方向::值d
更明显


您现在拥有的是一个常规枚举,它没有封装在
value
中,而是封装在
Direction
类中,其中
value
是。您只能直接在
Direction
内部处理它,但在它外部,您必须指定封装类的范围。

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

enum class Direction {
  UP,
  ...
};
区别在于
enum类
枚举将封装在其中。如果(d==Direction::UP)
,您仍然需要执行

如果将其设置为常规枚举:

enum Direction {
  UP,
  ...
};
然后,如果(d==UP)
与原始代码一样,您可以直接

同样,通过这种方式,您可以得到
方向d
,它比
值d
方向::值d
更明显


您现在拥有的是一个常规枚举,它没有封装在
value
中,而是封装在
Direction
类中,其中
value
是。您只能在
Direction
内部直接处理它,但在它外部,您必须指定封装类的范围。

关键/关键观察,伟大回答关键/关键观察,伟大回答当我编写以下命令时:
if(d==Direction::UP)
我收到错误C2676:binary'==':“Direction”没有定义此运算符或到预定义运算符可接受的类型的转换,有什么解决方法吗?@JaVaPG:可能重新读取“您的
Direction
类…没有任何数据成员”。当我编写以下命令时:
if(d==Direction::UP)
我收到错误C2676:二进制“==”:“Direction”没有定义此运算符或到预定义运算符可接受的类型的转换,有什么解决方法吗?@JaVaPG:可能重新读取“您的
Direction
类…没有任何数据成员”。