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 :

Constructeur par défaut pour une classe fille


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Par défaut Constructeur par défaut pour une classe fille
    Bonjour à tous,

    Dans le cadre d'un projet pour mon école, je dois programmer plusieurs classes mettant en œuvre de l'héritage.

    Le projet modélise un robot qui possède un sac.
    Ce sac est une liste d'objets (les objets étant une autre classe de mon projet). Je détaille pour se mettre dans le contexte, mais les classes n'ont pas vraiment d'importance pour la résolution de mon problème.

    Donc, j'ai réalisé une classe Sac, mais elle réalise exactement la même chose qu'une liste, et donc je la fait hériter de liste.

    Voici le code de la classe Sac :
    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
     
    #ifndef SAC_H
    #define SAC_H
     
    #include "../Outils/Liste/Liste.h"
    #include "../Objets/Objet.h"
     
    class Sac : public Liste<Objet>
    {
    	private :
     
    	public :
    		Sac();
     
    		virtual ~Sac();
    };
     
    #endif
    Bon, je vous l'accorde, cela ne sert strictement à rien, et j'aurais pu donner une liste d'objets directement à mon robot plutôt que de faire une classe sac.
    Mais je dirais que c'est mon problème, que j'en ai déjà discuter avec l'enseignant qui voulait une classe Sac. Donc, je la fais pour la faire, et normalement cela ne devrait pas poser de problème.

    Seulement, à la compilation, je me retrouve avec le problème d'édition de lien suivant : " [Linker error] undefined reference to `Sac::Sac()' "

    Je n'ai pas fait, dans un premier temps de fichier Sac.cpp car pour moi, le constructeur doit simplement appeler le constructeur de la classe mère et rien d'autre.

    J'ai essayé ça :
    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
    #ifndef SAC_H
    #define SAC_H
    
    #include "../Outils/Liste/Liste.h"
    #include "../Objets/Objet.h"
    
    class Sac : public Liste<Objet>
    {
    	private :
    		
    	public :
    		Sac() : Liste<Objet> {}
    		
    		virtual ~Sac();
    };
    
    #endif
    Même problème.

    J'ai essayé de faire un Sac.cpp, qui est de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "Sac.h"
     
    Sac::Sac() : Liste<Objet>()
    {}
    Et j'obtiens une autre message d'erreur de linkage : " [Linker error] undefined reference to `vtable for Sac' ".

    Bref, je n'arrive pas à faire quelque chose qui me parait vraiment simple.
    Donc comment faire pour implémenter facilement un constructeur par défaut qui ne fait rien d'autre qu'appeler le constructeur par défaut de la classe mère ?

    S'il vous plait, je ne souhaite pas revenir sur l'utilité où non d'un tel procédé, c'est purement et simplement pour ma culture personnelle et je me doute bien qu'en ne définissant pas la classe Sac j'aurais moins de problèmes !

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bonjour,
    Il n'y aucune raison que cela ne marche pas...
    Es-tu d'avoir également déclaré/défini le destructeur ?
    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
     
    #ifndef SAC_H
    #define SAC_H
     
    #include "../Outils/Liste/Liste.h"
    #include "../Objets/Objet.h"
     
    class Sac : public Liste<Objet>
    {
    	public :
    		Sac() : Liste<Objet> {};		
    		virtual ~Sac() {};
    };
     
    #endif

  3. #3
    Membre éprouvé Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Par défaut
    Bonjour,

    Normalement, le plus simple pour ce que tu veux faire, c’est de ne pas déclarer le constructeur par défaut du tout :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Sac : public Liste<Objet>
    {
    	private :
     
    	public :
    		// pas de Sac();
     
    		virtual ~Sac();
    };

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Par défaut
    @omc24 :
    Non, je n'ai pas défini le destructeur.

    @nowahn :
    J'avais également testé cette solution, mais je n'ai simplement pas pensé de la mentionner lors du premier message.

    Pour information, j'utilise dev-c++.

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Tu peux voir aussi le Sac comme une contenant une liste d'objet. L'héritage n'est pas la réponse à tout

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Par défaut
    @Astraya :
    Effectivement, j'y avais pensé, et j'y ai réfléchi. Le problème, c'est que je voulais avoir accès aux méthodes de la liste. Si j'encapsulais une liste, il faudrait que je redéfinisse les méthodes en questions (où alors que je mette mes attributs en public, ce qui amoindrit grandement l'intérêt de la POO).
    De plus, je l'ai précisé, c'est uniquement pourma culture personnelle et pas dans un but de performance, donc transformer le problème n'est pas ce que je cherche.
    Je me trouverais surement un jour dans une telle situation pour de bonnes raison et j'aimerais savoir résoudre le problème.

    Maintenant, si avec le code que je montre cela devrait fonctionner et que cela fonctionne chez certains, cela me va, je changerais de compilo à l'occasion. J'aimerais bien comprendre, c'est tout !

  7. #7
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    On peut voir les déclarations des autres classes s'il te plais? et ton main
    Merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/05/2009, 18h22
  2. Réponses: 2
    Dernier message: 28/05/2007, 09h28
  3. Réponses: 8
    Dernier message: 27/10/2006, 14h36
  4. Héritage d'un événement pour une classe fille
    Par korntex5 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 16h48
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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