2011-10-27 5 views
2

J'ai une classe simple qui utilise une énumération pour "status". Lorsque j'utilise la fonction membre getStatus, il retourne effectivement "Occupé" mais lorsque j'imprime la valeur, il affiche un "1". Comment puis-je imprimer "Occupé" au lieu de 1?Renvoie l'énumération au lieu de l'index

http://codepad.org/9NDlxxyU démonstration

#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

Non, @Nicol, ce n'est pas une copie du tout. La réponse à cette question est d'appeler la méthode 'ToString' de l'enum, que seuls les enums .Net ont, pas les enums C++ natifs. –

+1

Ce n'est pas un doublon. OP ne demande pas une manière "automatique" pour toute énumération. Il veut savoir ce qu'il faut faire pour que cette énumération soit affichée comme souhaité. – sehe

Répondre

4

Une édition complète de travail est en direct ici: http://ideone.com/WFo4g

Ajouter:

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

Vous ne pouvez pas sans travail. Busy est juste un identifiant qui existe au moment de la compilation pour votre commodité. Pendant la compilation, le compilateur remplace toutes les occurrences de celui-ci par la valeur réelle 1. Pour que cela fonctionne comme vous le souhaitez, vous aurez besoin d'un tableau ou d'un mappage supplémentaire de la valeur enum vers une chaîne qui représente l'identificateur d'enum.

+0

oh c'est boiteux, un peu défait le but. – dukevin

+1

Pas du tout. Le but est d'empêcher les valeurs magiques et les fautes de frappe. La même raison nous avons des variables. –

Questions connexes