3

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

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 对象的状态与某个枚举值进行比较将正确评估。

编辑:包括 getTableStatus(void);

TableStatus Table::getTableStatus(void){
        return status;
}
4

1 回答 1

2

当我使用枚举时,我遇到了同样的困惑。有好几次,我必须查看有关 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

于 2013-03-21T18:22:50.170 回答