返回枚举而不是索引

时间:2011-10-27 21:28:05

标签: c++ enums

我有一个简单的类,它使用enum作为“status”。当我使用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"
}

2 个答案:

答案 0 :(得分: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>";
}

答案 1 :(得分:2)

你不能没有进一步的工作。 Busy只是一个在编译时存在的标识符,以方便您使用。在编译期间,编译器用实际值1替换它的所有出现。

为了让它按你想要的方式工作,你需要一个额外的数组或映射,从枚举值到描述枚举标识符的字符串。