比较枚举类型时出现逻辑错误
Logical error when comparing enum type
我试图比较两个枚举值,但在运行时它似乎总是评估为真。
枚举在Table.h中的声明,用返回方法获取状态值:
enum TableStatus { IDLE, SEATED, ORDERED, SERVED};
class Table
{
private:
...
TableStatus status; // current status
public:
...
TableStatus getTableStatus(void);
}
在我需要比较枚举值的部分中,我一直在尝试类似以下的条件:
if (tables[tableId]->getTableStatus() == TableStatus(SERVED))
我的问题是如何让这个逻辑工作。因为将Table对象的状态与某个enum值进行比较将会正确计算。
编辑:包括getTableStatus(void);
TableStatus Table::getTableStatus(void){
return status;
}
当我使用enum时,我遇到了同样的困惑。有几次我不得不查阅关于enum的教程来确保我是正确的。每当我使用枚举编程时,我都会阅读这个(http://www.cprogramming.com/tutorial/enum.html)教程。
基本上枚举(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
相关文章:
- 错误:从"int"到枚举c++的转换无效
- C++:枚举:错误:应使用标识符而不是"}"
- 无法找到简单的开关大小写枚举错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 如何摆脱C++中的枚举不匹配错误?
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 枚举输出的值错误
- 枚举成员不是类型错误
- C++ Visual Studio 调试器枚举错误
- 比较枚举的值会给出编译器错误
- C++中一个非常简单的枚举类错误
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- Bjarne Stroustrup PPP - 第 9 章 演练 4 - cout 枚举错误
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 错误:枚举未在此范围内声明
- 使用 SDL2 返回错误枚举值的函数
- 使用宏时,错误枚举没有成员
- 代码块C++错误枚举前应为主表达式