我正在尝试比较两个枚举值,但在运行时它似乎总是评估为真。
Table.h中的枚举声明用return方法获取状态值:
enum TableStatus { IDLE, SEATED, ORDERED, SERVED};
class Table
{
private:
...
TableStatus status; // current status
public:
...
TableStatus getTableStatus(void);
}
在我需要比较枚举值的部分中,我一直在尝试看起来如下的条件:
if (tables[tableId]->getTableStatus() == TableStatus(SERVED))
我的问题是如何让这种逻辑发挥作用。在比较中,Table对象的状态与某个枚举值将进行正确评估。
编辑:包括getTableStatus(void);
TableStatus Table::getTableStatus(void){
return status;
}
答案 0 :(得分:2)
当我使用枚举时,我遇到了同样的困惑。有几次我必须查看enum教程以确保我是正确的。每当我使用枚举编程时,我都会阅读此(http://www.cprogramming.com/tutorial/enum.html)教程。
基本上,Enums(C ++ 98)的行为与类不同,所以你写的不正确。 枚举可以直接引用,因此您必须写:
if (tables[tableId]->getTableStatus() == SERVED)
提供枚举和编写代码的函数在同一范围内。
如果您使用的是C ++ 11,enum classes
是一个更好的选择。我喜欢枚举类,因为我不像以前那样使用C ++ 98枚举。
http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html