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 :

static const dans une classe ?


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut static const dans une classe ?
    Bonjour, j'aimerai avoir un tableau de données communes a toutes mes instances de ma classe, alors je me suis dis, ben je vais utiliser static, et puis comme les données ne seront pas modifié hop un ptit const... et ben ca ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class truc
    {
    protected :
    static const int tab[5]={ 0, 0, 2, 5, 8 };
    };
    Bien entendu a tous les coups j'ai pas le droit de definir mon tableu dans ma declaration de classe, mais puisqu'il est static!

    sinon, quelle est la meilleure méthode ?
    je ne veux surtout pas qu'il y ai une allocation d'un tableau en memoire a chaque instentiation d'un objet truc. surtout que concretement mon tableau aura plus de 5 valeurs...

    Merci.

  2. #2
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    Bonjour ,

    si j'ai bien compris ton problème est résolu par un pattern qui s'appel Singleton.

    Essaye de voir ce bout de code qui présente son implementation au C++.

    http://www.codeproject.com/cpp/singletonrvs.asp


  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Les données membres statiques doivent être définies hors de la classe. C'est expliqué en long et en large dans la FAQ C++.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Pattern Singleton?...pour un simple tableau de int... heu.. comment écraser une mouche avec un mateau piqueur, non ?
    Merci mais c'est trop lourds pour moi (il faudrait que je crée un classe rien que pour mon tableau... qui ne sera donc instancié qu'une seule fois, et que dans le constructeur de celui-ci j'effectue l'affectation, merci la lisibilité du code... non non)
    Ps : ici un lien en francais qui explique bien le bouzin : http://tfc.duke.free.fr/coding/singleton.html

    au pire j'avais penser mettre mon tableau en global, mais c'est trop moche.

    dites-moi qu'il y a quelqu'un qu'a une autre solution....

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Citation Envoyé par Laurent Gomila
    Les données membres statiques doivent être définies hors de la classe. C'est expliqué en long et en large dans la FAQ C++.
    Désolé mais c'est pas expliqué en long et en large pour les tableaux !!!

    dans la FAQ, on a le cas particulier du "const" "static" et "int"... o na donc le droit de l'ecrire dedans super.
    et c'est ecrit que dans les autres cas c'est en dehors... mais moi je n'y arrive pas, car je ne vois pas dans la FAQ comment on fait avec un TABLEAU CONSTANT.

    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //dans le .H
    class truc
    {
    protected:
    static const int tab[5];
    };
    //dans le .CPP
    int truc::tab[5]= {0,0,2,5,8};
    et bien ca ne marche pas, mon compilo me sort : protected: static int const * const truc::tab' : redefinition; different type modifiers

    Je ne sais pas quoi faire.
    Merci.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Laurent a fournis l'explication:

    Tu dois initialiser ton tableau en dehors de la classe:
    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
     
    #include <iostream>
    using namespace std;
    class Maclass
    {
        public:
            Maclass();
        protected:
            static const int b[4];
    };
    Maclass::Maclass() /* juste pour voir ce qui se passe ;) */
    {
        for(int i=0;i<4;i++)
            cout<<b[i]<<" ";
    }
    const int Maclass::b[4]={1,2,3,4};
    int main()
    {
        Maclass m;
        return 0; 
    }
    [EDIT]
    • tu remarqueras que le mot clé const fait partie de la définition du type
    • l'initialisation doit avoir lieu dans exactement un seul fichier
    • jette un oeil sur la FAQ qui traite des données statiques =>ICI<=
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Citation Envoyé par koala01
    Laurent a fournis l'explication:
    Oui enfin, c'etait pas évident non plus hein. pour ceux qui connaissent déjà j'en doute pas. mais la FAQ passe assez rapidement avec un seul exemple "en dehors". (moi mon membre est protected celui de la FAQ public, moi c'est un tableau, celui de la FAQ un type simple, et en plus le mien est const... pour vous c'est un point de détail, mais pour ceux qui ont besoin de la FAQ pour comprendre c'est pas évident non plus)

    Merci, avec ton code j'ai vu qu'il me manquait le const dans mon deuxieme essais.

    EDIT :
    [*]jette un oeil sur la FAQ qui traite des données statiques =>ICI<= [/LIST]
    Oui oui c'est bien là que je regardais mais bon j'suis pas assez balez. sinon impressionnant les articles s"fiasco dans l'ordre d'initialisation des variables statiques".

    Merci.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par hpfx
    Oui enfin, c'etait pas évident non plus hein. pour ceux qui connaissent déjà j'en doute pas. mais la FAQ passe assez rapidement avec un seul exemple "en dehors". (moi mon membre est protected celui de la FAQ public, moi c'est un tableau, celui de la FAQ un type simple, et en plus le mien est const... pour vous c'est un point de détail, mais pour ceux qui ont besoin de la FAQ pour comprendre c'est pas évident non plus)
    Je viens d'ouvrir un sujet dans la partie "contribuer" pour demander s'il était possible de rajouter un exemple d'initialisation de tableau/ de variable constante...
    EDIT :
    Oui oui c'est bien là que je regardais mais bon j'suis pas assez balez. sinon impressionnant les articles s"fiasco dans l'ordre d'initialisation des variables statiques".
    Voila le genre de choses qui doit faire plaisir à Gege2061 et à Franck.H
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Static Context dans une classe non qualifiée
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 4
    Dernier message: 17/11/2010, 18h00
  2. problème de const dans une classe
    Par dronix dans le forum C#
    Réponses: 8
    Dernier message: 26/03/2010, 10h49
  3. validite d'une static global dans une classe
    Par kacedda dans le forum C++
    Réponses: 24
    Dernier message: 06/01/2008, 13h51
  4. Initialisation const dans une classe fille
    Par cyberjoac dans le forum C++
    Réponses: 3
    Dernier message: 07/10/2007, 17h53
  5. fonction static dans une class
    Par Stany dans le forum C++
    Réponses: 3
    Dernier message: 16/06/2006, 14h43

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