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
类…没有任何数据成员”。