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 :

Switch et const


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 36
    Points
    36
    Par défaut Switch et const
    Bonjour à tous,

    J'ai un souci de compil dans un case de mon switch. J'essaie de lui donner un membre de ma classe, qui est déclaré en static const :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClass{
    public:
        static const int MA_CONST = 0;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    switch(bidule){
     
    case MA_CONST:...
    }
    Lorsque je fais comme ceci, pas de souci.

    Maintenant je veux initialiser MA_CONST dans le .cpp, et non pas dans le .h directement, et c'est là que j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClass{
    public:
        static const int MA_CONST;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const int MyClass::MA_CONST = 0;
    J'aimerais comprendre pourquoi. Le compilo n'est-il pas capable de voir que le membre est tout de même déclaré en const (même si pas initialisé directement) ?

    Merci pour vos lumières.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour,

    Normalement, cela devrait marcher... Je le fais assez souvent !

    Tu n'aurais pas un autre problème plutôt ? Que dit exactement le compilateur ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Il me dit :

    error: `MyClass::MA_CONST' cannot appear in a constant-expression.

    Alors que j'ai bien déclaré comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //fichier MyClass.h
    static const int MA_CONST;
     
    //fichier MyClass.cpp
    const int MyClass::MA_CONST = 0;
    Le switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch((*foesMode)[i]){
    case MyClass::MA_CONST:{
                                          //.......
                                         }
    default://...........
    }
    J'espère que ce n'est pas le compilo qui me joue un tour (MinGW32-g++).

    Cela marche si je fais l'initialisation dans le .h, mais je préfèrerais la faire dans le .cpp. Des idées ?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Switch n'a pas seulement besoin d'une constante, mais d'une constante connue à la compilation... La question est "pourquoi la première écriture ne te satisfait-elle pas ?"
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    OK Merci beaucoup, du coup je le fais dans le .h !

  6. #6
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    C'est quand-même troublant son affaire, normalement on doit pouvoir déclarer une constante membre static d'une classe dans le .h et l'initialiser dans le .cpp

    Ça passe sur Qt qui utilise MinGw

    [Edit]
    Citation Envoyé par JolyLoic
    Switch n'a pas seulement besoin d'une constante, mais d'une constante connue à la compilation
    Effectivement c'est ça le problème, on en apprend tous les jours
    [/Edit]

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

Discussions similaires

  1. Réseaux : switch, routeur et wi-fi
    Par SteelBox dans le forum Hardware
    Réponses: 4
    Dernier message: 07/12/2003, 20h25
  2. Switch 1000Mbit
    Par Civodul4 dans le forum Hardware
    Réponses: 8
    Dernier message: 02/12/2003, 13h16
  3. switch
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 07/10/2003, 07h59
  4. Chaines et pointeurs mais pas "const"
    Par hpfx dans le forum C
    Réponses: 9
    Dernier message: 05/10/2003, 20h23
  5. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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