3

2 つの列挙値を比較しようとしていますが、実行時に常に true と評価されるようです。

ステータスの値を取得する return メソッドを使用した Table.h の enum 宣言:

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 に答える