比较枚举类型时出现逻辑错误

Logical error when comparing enum type

本文关键字:错误 枚举 类型 比较      更新时间:2023-10-16

我试图比较两个枚举值,但在运行时它似乎总是评估为真。

枚举在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