2011-10-27 99 views
2

我有一個簡單的類,使用枚舉的「狀態」。當我使用getStatus成員函數時,它確實返回「忙」,但是當我打印該值時,它顯示「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,這不是一個重複的。這個問題的答案是調用枚舉的'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替換它的所有發生。

爲了使它像你想要的那樣工作,你需要一個額外的數組或從枚舉值到描述枚舉標識符的字符串的映射。

+0

哦,這是跛腳,有點失敗的目的。 – dukevin

+1

沒有。目的是防止魔法值和拼寫錯誤。同樣的原因,我們有變數。 –