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 :

Undefined reference to membre static classe base polymorphe


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Undefined reference to membre static classe base polymorphe
    Salut,
    je voudrai de l'aide.
    Lors de la compilation d'un projet Dev-C++ (sous Xp Familiale) contenant des classes polymorphiques, j'ai un problème de [Linker error] undefined reference to 'Employe::nbEmployes' .

    Voilà le prototype de mes classes, debarrassés de la plupart des méthodes et membres:
    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
    30
    31
    32
    class Employe {
                    public:
                           Employe();
                           ~Employe();
                           virtual void Generer_Fiche(int *_nSolde, int *_nCompetence, string &_szDescription, int *_nTauxProbleme) = 0;
                           virtual void Enregistrer_Employe(int _nSolde, int _nCompetence, string &_szDescription, int _nTauxProbleme);
                           static int nbEmployes;
                          //Plus qques méthodes
     
                    protected:
                           //Membres que j'ai supprimés
                    };
     
        class Infirmiere : public Employe {
              public:
                     Infirmiere();
                     virtual ~Infirmiere();
                     virtual void Generer_Fiche(int *_nSolde, int *_nCompetence, 
                                     string &_szDescription, int *_nTauxProbleme);
     
              private:
        };
     
        class Generaliste : public Employe {
              public:
                     Generaliste();
                     virtual ~Generaliste();
                     virtual void Generer_Fiche(int *_nSolde, int *_nCompetence, 
                                     string &_szDescription, int *_nTauxProbleme);
     
              private:
        };
    Dev-C++ ne m'indique aucune ligne pour ces erreurs.

    J'utilise le membre static que dans le constructeur et le destructeur (pour des incrémentation et toussa).

    Merci de bien vouloir m'aider .

    raishoux

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 63
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    il faut que tu initialises ton membre static. cf FAQ : http://c.developpez.com/faq/cpp/?pag...SS_init_static

    Déclares aussi le destructeur de ta classe Employe comme étant virtuelle. Tu risques d'avoir quelques problèmes lors de la destruction des classes dérivées si tu les manipules via un pointeur sur Employe.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu as bien déclaré que Employe avait un membre statique de type int nommé nbEmployes. Il reste à le définir (un membre statique ce n'est jamais qu'une variable globale avec un contrôle d'accès, la déclaration dans la classe correspond à une déclaration extern, et de même qu'il faut définir les globales, il faut définir les membres statiques).

    Dans un fichier cpp (celui qui contient les définissions des fonctions par exemple),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Employe::nbEmployes = 0;
    ou tout autre valeur adéquate à la place de 0.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Merci!
    Sa marche impec' for me!

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

Discussions similaires

  1. Fonctions membres static - undefined reference
    Par OliveK dans le forum C++/CLI
    Réponses: 3
    Dernier message: 09/10/2010, 01h40
  2. Fonctions membres static - undefined reference
    Par OliveK dans le forum C++
    Réponses: 1
    Dernier message: 19/08/2010, 00h26
  3. Static const (undefined reference avec g++)
    Par _skip dans le forum Débuter
    Réponses: 3
    Dernier message: 21/10/2009, 12h15
  4. Réponses: 3
    Dernier message: 25/02/2006, 18h30
  5. pointeur membre static de classe
    Par Ca$ul dans le forum C++
    Réponses: 3
    Dernier message: 26/08/2004, 14h02

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