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