IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Utilisation d'une �num�ration


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut Utilisation d'une �num�ration
    Bonjour � tous,

    Consid�rons cette �num�ration:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    enum MonEnum
    {
        ValeurA,
        ValeurB,
        ValeurC,
        Valeur1,
        Valeur2,
        Valeur3
    };
    J'ai une fonction qui prend un entier :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void MaFonction(unsigned int uiEntier)
    {
        MonEnum eValue;
        switch(uiEntier)
        {
            case 1:
               eValue = Valeur1; break;
            case 2:
               eValue = Valeur2; break;
            case 2:
               eValue = Valeur2; break;
        }
    }
    Que j'aimerai transformer en
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    void MaFonction(unsigned int uiEntier)
    {
         MonEnum eValue = Valeur1 + (uiEntier - 1);
    }

    Mais le compilateur m'indique qu'il ne peut pas transformer un unsigned int en MonEnum.

    Que dois-je faire ?


    Merci beaucoup


    A bient�t

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Il te faudra faire un cast explicite avec static_cast<>.
    Le C++ n'accepte d�j� pas les op�rations arithm�tique sur les enums, il les convertit en int; l�, tu fais carr�ment une op�ration arithm�tique sur une enum et un int, donc...

    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void MaFonction(unsigned int uiEntier)
    {
         MonEnum eValue = static_cast< MonEnum >(Valeur1 + (uiEntier - 1));
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    A mon avis, c'est risqu� ce que tu veux faire (m�me si cela marche)

    Peut �tre que plus tard tu voudras modifer ton enum comme cela :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    enum MonEnum
    {
        ValeurA = 12,
        ValeurB = 17,
        ValeurC = 20,
        Valeur1 = 5,
        Valeur2 = 8,
        Valeur3 = 1
    };
    Et la ta fonction ne marchera plus du tout.

    Je pr�f�re :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void MaFonction(unsigned int uiEntier)
    {
        MonEnum eValue;
        switch(uiEntier)
        {
            default:
               eValue = ValeurA; break; // valeur par defaut
            case 1:
               eValue = Valeur1; break;
            case 2:
               eValue = Valeur2; break;
            case 2:
               eValue = Valeur2; break;
        }
        return eValue;
    }
    Qui a le m�rite d'�tre plus "safe"
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    d'un autre cot� peut etre un jour voudras tu transformer ton enum comme cela :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    enum MonEnum
    {
        ValeurA,
        ValeurB,
        ValeurC,
        Valeur1,
        Valeur2,
        Valeur3,
        Valeur4,
        Valeur5,
        Valeur6
    };
    et la c'est la seconde version qui fonctionnera. et ce genre de modif arrive plus souvent que rendre les index aleatoires...

  5. #5
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 825
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 825
    Par d�faut
    Ouais c'est clair que �a encourage les effets de bords ce que je souhaite faire.
    Mais en m�me temps j'ai une �num�ration qui va de Valeur1 � Valeur31... un switch de 31 "case"... c'est moche quand m�me.

    Sinon j'ai vu sur le net MonEnum(Valeur1 + x)

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ne le fais pas et utilise le static_cast � la place.
    Un cast function-style, c'est aussi dangereux qu'un cast C-style: En C++, c'est g�n�ralement � bannir.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [D�butant(e)] JSP utilisation static....une autre
    Par tcgenrecom dans le forum Servlets/JSP
    R�ponses: 2
    Dernier message: 01/03/2004, 15h27
  2. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    R�ponses: 3
    Dernier message: 03/12/2003, 19h11
  3. Utilisation d'une variable sur plusieurs unit�s
    Par Yamaneko dans le forum Langage
    R�ponses: 2
    Dernier message: 05/06/2003, 11h23
  4. Utilisation d'une dll �crite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    R�ponses: 4
    Dernier message: 05/08/2002, 09h19
  5. R�ponses: 4
    Dernier message: 05/06/2002, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo