2011-10-27 8 views
2

"ステータス"の列挙型を使用する単純なクラスがあります。 getStatusメンバ関数を使用すると、実際には "Busy"が返されますが、値を印刷すると "1"が表示されます。 1ではなく「ビジー」をどのように印刷できますか?インデックスの代わりに列挙を返します

http://codepad.org/9NDlxxyUデモ

#include <iostream> 
using namespace std; 

enum Status{Idle, Busy}; 
class text 
{ 
public: 
    void SetStatus(Status s); 
    Status getStatus(); 
private: 
    Status s;  
}; 
void text::SetStatus(Status s) 
{ 
    this->s = s; 
} 
Status text::getStatus() 
{ 
    return this->s; 
} 

int main() 
{ 
    text myText; 
    myText.SetStatus(Busy); 
    cout << myText.getStatus() << endl; //outputs 1, should output "Busy" 
} 
+4

いいえ、@Nicolは、それがすべてで重複していないのです。その質問に対する答えは、enumの 'ToString'メソッドを呼び出すことです。このメソッドは、.NETの列挙型だけで、ネイティブのC++列挙型ではありません。 –

+1

重複していません。 OPは、どの列挙型に対しても「自動」な方法を求めていません。彼は、_this_ enumを必要に応じて表示させるために何をすべきかを知りたがっています。 – sehe

答えて

4

完全に動作する編集ここに生きている:http://ideone.com/WFo4g

追加:

std::ostream& operator<<(std::ostream& os, const Status status) 
{ 
    switch (status) 
    { 
     case Idle: return os << "Idle"; 
     case Busy: return os << "Busy"; 
     default: return os << "Status:" << status; 
    } 

    return os << "<error>"; 
} 
2

することはできませんさらに作業なし。 Busyは、便宜のためにコンパイル時に存在する識別子です。コンパイル時には、コンパイラはすべての実行結果を実際の値の1に置き換えます。

あなたが望むように動作させるには、enum値から列挙識別子を表す文字列への追加配列またはマッピングが必要です。

+0

ああ、それは色あせ、ちょっと、目的を破る。 – dukevin

+1

全くありません。目的は、魔法の値とタイプミスを防ぐことです。変数があるのと同じ理由です。 –