PDA

Visualizza la versione completa : [c++ MFC]Scorrere enum


giuseppe500
24-04-2008, 11:25
ciao.
Come si fa in c++ a scorrere un enum?ad es:
enum Suit {
Diamonds = 5,
Hearts,
Clubs = 4,
Spades
};
vorrei qualcosa (se è possibile)del tipo:

Suit IEnEnum;
valore IEnEnum=5(diamonds)
//passa al successivo
IEnEnum++
valore IEnEnum=6(Hearts)
//passa al successivo
IEnEnum++
valore IEnEnum=4(Clubs)
ecc...
Grazie.

menphisx
24-04-2008, 11:31
1 /*
2 * enum test
3 */
4
5 #include <cstdio>
6
7 typedef enum {
8
9 A = 0,
10 B,
11 C,
12 D,
13 E,
14 F
15
16 }Test;
17
18 int main(void){
19
20 Test a = A;
21
22 printf("%d\n", a);
23 printf("%d,\n", ++a);
24
25 return 0;
26
27 }

giuseppe500
24-04-2008, 11:52
mi da questo errore:
c:\Documents and Settings\frg\Documenti\Visual Studio Projects\ProvaEnum\ProvaEnum\ProvaEnumDlg.cpp(95): error C2675: unary '++' : 'CProvaEnumDlg::Test' does not define this operator or a conversion to a type acceptable to the predefined operator

shodan
24-04-2008, 12:42
In C++ non è possibile incrementare un valore di un enum, perché la forte tipizzazione statica del linguaggio considera l'enum un tipo a se stante.
Quindi

Test a = A; a++;

si può fare in C, ma non in C++ perché Test è considerato un tipo a se stante non trasformabile in un int

Hai due strade:
o assegni il valore dell'enum ad un int e incrementi quello;

int a = A; a++;

oppure leggi qui
http://www.eptacom.net/pubblicazioni/pub_it/enum.html
e trasformi l'enumerato in una vera e propria classe.

XWolverineX
24-04-2008, 19:26
Originariamente inviato da shodan
o assegni il valore dell'enum ad un int e incrementi quello;
int a = A; a++;


Non è la soluzione giusta: gli enum non hanno sempre valori sequenziali, e l'incremento quindi può portare a situazioni non previste



typedef enum {
8
9 A = 0,
10 B = 10,
11 C = 12,
12 D = 31,
13 E = 21,
14 F = 56
15
16 }Test;


Equiparandolo a un int e incrementandolo, il codice non funzionerà ( o comunque avrà risultati non implementati)

MacApp
25-04-2008, 04:00
Io solitamente utilizzo le enum come famiglie di costanti intere.
Se proprio necessito di iterarvici,allora costruisco classi iteratrici, essenzialmente basate su metodi MyEnumToInt e viceversa.
Per ragioni di debug, sempre scrivo funzioni del tipo MyEnumToString.

menphisx
25-04-2008, 05:08
Originariamente inviato da shodan
In C++ non è possibile incrementare un valore di un enum, perché la forte tipizzazione statica del linguaggio considera l'enum un tipo a se stante.
Quindi

Test a = A; a++;

si può fare in C, ma non in C++ perché Test è considerato un tipo a se stante non trasformabile in un int

Hai due strade:
o assegni il valore dell'enum ad un int e incrementi quello;

int a = A; a++;

oppure leggi qui
http://www.eptacom.net/pubblicazioni/pub_it/enum.html
e trasformi l'enumerato in una vera e propria classe.

Grazie non lo sapevo :mame:

Loading