Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c++ MFC]Scorrere enum

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ MFC]Scorrere enum

    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.

  2. #2
    codice:
      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 }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    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

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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

    codice:
    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)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    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.

  7. #7
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.