比较枚举类型时的逻辑错误

时间:2013-03-21 18:08:17

标签: c++ enums return conditional

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

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;
}

1 个答案:

答案 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