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 :

problème avec le constructeur de copie


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut problème avec le constructeur de copie
    Bonjour,

    J'ai défini un classe Personnage. J'essaie de copier le Personnage goliath vers le Personnage david comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     int main()
    {
    	Personnage goliath("Epée aiguisée", 20);
    	Personnage david = goliath;
    ...
    }
    Voici les constructeurs que j'ai crée dans la classe Personnage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Personnage::Personnage() : m_vie(100), m_mana(100)
    {
    	m_arme = new Arme();
    }
    Personnage::Personnage(string nomArme, int degatsArme) : m_vie(100), m_mana(100)
    {
    	m_arme = new Arme(nomArme, degatsArme);
    }
    Le compilateur me dit alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Undefined reference to 'Personnage::Personage(Personnage const&)
    Ma question :
    -- Le compilateur ne crée - t - il pas automatiquement le constructeur de copie ?
    -- le problème serait - il ailleurs ?

    Merci d'avance pour votre aide.

  2. #2
    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 : 50
    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
    Par défaut
    Si. Sauf si tu en déclares un toi même. Peut-on voir à quoi ressemble la définition de ta classe ?
    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.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    Voici les constructeurs que j'ai crée dans la classe Personnage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Personnage::Personnage() : m_vie(100), m_mana(100)
    {
    	m_arme = new Arme();
    }
    Personnage::Personnage() : m_vie(100), m_mana(100)
    {
    	m_arme = new Arme();
    }
    Deux fois la meme chose, c'est normal?

    Le compilateur me dit alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Undefined reference to 'Personnage::Personage(Personnage const&)
    Ma question :
    -- Le compilateur ne crée - t - il pas automatiquement le constructeur de copie ?
    Mon hypothese est que tu as declare mais pas defini le constructeur de copie. Si tu veux celui genere par defaut, il ne faut pas en declarer un.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    effectivement, je l'ai declaré et nn pas défini ...
    Merci.

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Sinon, j'ai une autre question, liée au constructeur de copie.
    -- j'ai deux Personnage david et goliath qui ont un pointeur arme pointant vers le meme objet arme (voir main ci-dessus).
    -- j'ai détruit david ( d'abord son arme, puis lui meme ), puis j'ai détruit goliath et ceux en fin de main( )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    goliath.~Personnage();
    david.~Personnage();
    Ma question :
    est-ce normal que le compilateur ne rale pas, que le programme ne plante pas ... ?
    En effet quand je détruit goliath l'arme disparait avec lui. Quand je tente de détruire david, le compilateur est censé cherche son arme ... NON ?

    Merci d'avance pour votre aide.

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    goliath.~Personnage();
    david.~Personnage();
    Les circonstances ou ce genre de syntaxe (appel explicite au destructeur) est un bon choix sont rares. Extremement rare. Je ne suis pas sur de l'avoir jamais utilise en dehors de programmes d'experimentation.

  7. #7
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Jean-Marc.Bourguet, j'ai pas très bien compris ce que t'a dit.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/06/2011, 23h36
  2. Petit problème avec le constructeur par copie
    Par beegees dans le forum C++
    Réponses: 16
    Dernier message: 01/04/2008, 16h34
  3. [Debutant] Problème avec un constructeur par copie
    Par Drannor dans le forum Débuter
    Réponses: 5
    Dernier message: 12/03/2007, 09h15
  4. [Conception]Problèmes avec un constructeur dérivé
    Par Le Furet dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2006, 09h44
  5. Réponses: 4
    Dernier message: 14/01/2005, 19h41

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