班级方向
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)
我不明白如何检查我收到错误检查的条件。
有什么想法吗? 任何帮助将不胜感激。
答案 0 :(得分:8)
UP
在class 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 d
比value d
或Direction::value d
更加引人注目。
您现在拥有的是常规枚举,它未封装在value
中,但封装在Direction
所在的value
类中。您只能在Direction
内直接处理它,但除此之外,您必须指定封装类的范围。
答案 4 :(得分:0)
if(d.value == UP)
d类型class Direction
不属于Enum value
类型。
因此,您无法比较d
和`UP