2009-12-04 7 views
0

j'ai écrit classe comme ceci:opérateur Conversion en ENUM

#pragma once 
#include "stdafx.h" 

struct Date 
{ 
private: 
int day; 
int year; 
enum Month {jan = 1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec}; 
Month* month; 
enum date_state 
{ 
    good,err_flag, bad_day, bad_month, bad_year, 
}; 
//I would like to define converting operator from enum to char 
Date::date_state::operator char() 
{ 
    return err_flag; 
} 
date_state err_state; 
void clear(date_state state = good); 
date_state rdstate() const; 
void check_day(const int d)const; 
void check_month()const; 
void check_year()const; 
public: 
Date(const int d,const Date::Month& m, const int y); 

}; 

et, fondamentalement, cela ne fonctionne pas.

+2

J'ai essayé de répondre à votre question, mais ma tentative n'a pas fonctionné. – Artelius

+0

Vous voudrez peut-être ajouter un tag 'C++' à cette question ... –

+0

Vous avez écrit une classe ou une structure? Qu'est-ce que tu veux dire par là que ça ne marche pas - qu'est-ce qui se passe? – Amarghosh

Répondre

0

Vous ne pouvez pas déclarer des fonctions membres pour enum date_state, parce qu'il est un ENUM, mais vous pouvez le faire pour class Date:

class Date { 
... 
    enum date_state 
    { 
     good, bad_day, bad_month, bad_year, 
    } err_flag; 

    operator char() { 
     return err_flag; 
    } 
} 

Mais est-ce recommande plutôt d'utiliser une fonction membre normale à la place, car un opérateur de conversion peut facilement être utilisé accidentellement.

1

Enum n'est pas une classe/struct, par conséquent vous ne pouvez pas définir un opérateur de conversion pour cela.

Je suggère d'écrire une fonction de portée globale (au sein d'un espace de noms) pour effectuer les conversions appropriées.

Quelque chose le long des lignes de:

char convert (Month m) { 
    switch (m) { 
    case (jan): return 'j'; 
    case (feb): return 'f'; 
    default: return 'x'; 
    } 
} 
+0

Merci --------------------------------- –

+0

Mais j'ai toujours pensé que enum est un type à part entière en C++. Évidemment n'est pas. P.S. Toute chance que l'insertion de bloc de code dans ce site sera fait sur quelque chose comme [code = cpp] du code ici [/ code]. Cette entreprise avec des espaces me rend fous. –

+0

C++ 0x ajoutera "enmus à part entière". Bien au moins partiellement ;-) – hirschhornsalz