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

Langage C++ Discussion :

typedef d'une enum


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut typedef d'une enum
    Bonjour,

    J'aimerais « dupliquer » une enum.
    Naïvement, j'ai écrit ce code, qui ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    enum uneEnum {A, B, C};
     
    class maClasse
    {
     
      public:
        typedef uneEnum monEnum;
     
    };
    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
    class uneClasse
    {
     
      public:
        enum uneEnum {A, B, C};
     
    };
     
    class maClasse
    {
     
      public:
        typedef uneClasse::uneEnum monEnum;
     
    };
    En fait, le type maClasse::monEnum semble bien exister, mais si j'essaie quelque chose du genre : "maClasse::A", j'ai un message d'erreur :
    « A » n'est pas membre de « maClasse ».
    Quelqu'un aurait des suggestions ?

    Ah oui, une dernière chose.
    Je n'ai pas de contrôle sur les fichiers dans lesquels sont définies les enums.
    [edit]Quant aux enums, elles sont générées automatiquement, et donc leur contenu n'est pas fixe (même s'il est facilement déterminable).[/edit]
    J'aimerais faire une sorte de « façade », qui soit utilisable que l'enum soit déclarée dans l'espace de nom global ou à l'intérieur d'une autre classe.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    As-tu essayé

    ?

  3. #3
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Maintenant, oui :
    « maClasse::monEnum » n'est pas une classe ou un espace de nom

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Mais comment l'utilises-tu ?

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class uneClasse
    {
     
      public:
        enum uneEnum {A, B, C};
     
    };
     enum
     {
         A,B,C
     };
    class maClasse
    {
     
      public:
        enum monEnum
        {
           A = uneClasse::A
          ,B = uneClasse::B
          ,C = uneClasse::C
        };
        enum
        {
            A2 = ::A // ::A pour ne pas faire une redéfinition du A juste avant de monEnum
            ,B2 = ::B
            ,C2 = ::C
        };
     
    };
    pas mieux

  6. #6
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    @3DArchi: Je te remercie, mais j'y avais déjà pensé, et j'aimerais autant éviter de redéfinir les enums.
    Vu qu'elles sont générées automatiquement (par un programme externe, bison en l'occurrence), je ne peux pas le faire si je veux faire une classe générique.
    C'est sûr que pour un projet donnée, je pourrais me le permettre, mais bon...

    Citation Envoyé par oodini Voir le message
    Mais comment l'utilises-tu ?
    Hum... Je ne suis pas sûr de comprendre ta question...
    Que veux-tu dire exactement par là ?


    Vu la tournure que prennent les choses, je sens que vais me tourner vers une macro qui se chargera de donner la syntaxe appropriée.
    Oui, je sais, ce n'est pas top...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. accès aux éléments d'une enum
    Par aymeric__ dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2006, 21h17
  2. Affectation/récupération de valeurs dans une Enum ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2006, 16h12
  3. Réponses: 4
    Dernier message: 25/02/2006, 13h30
  4. Réponses: 17
    Dernier message: 16/10/2005, 21h01
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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