Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharge de constructeur ?

Sujet résolu
    15 juin 2018 à 1:37:59

    Bonjour,

    Je fais face à un problème sur le cours C++

    Je suis au chapitre des classes et j'ai essayé de faire l'exercice pour entrer manuellement la vie et le mana.

    Voici le code:

    main.cpp

    #include <iostream>
    #include "Personnage.h"
    
    using namespace std;
    
    int main()
    {
    
        Personnage perso("Épée aiguisée",20);
        Personnage squelette(200, 0, 1);
        cout << "Perso" << endl;
        perso.afficherEtat();
        cout << "Squelette" << endl;
        squelette.afficherEtat;
    
        return 0;
    }
    

    Personnage.h

    #ifndef PERSONNAGE_H_INCLUDED
    #define PERSONNAGE_H_INCLUDED
    
    #include <iostream>
    #include <string>
    #include "Arme.h"
    
    class Personnage
    {
        //Méthodes
        public:
    
        Personnage();
        Personnage(std::string nomArme, int degatsArme);
        Personnage(int vie, int mana, int quantitePotion);
        void attaquer(Personnage &cible);
        void lancerSort(Personnage &cible);
        void recevoirDegats(int nbDegats);
        void boirePotionVie(int soinPotion);
        void changerArme(std::string nomNovelleArme, int degatsNouvelleArme);
        bool estVivant() const;
        void afficherEtat() const;
    
        //Attributs
        private:
    
        int m_vie;
        int m_mana;
        Arme m_arme;
        int m_quantitePotion;
    };
    #endif // PERSONNAGE_H_INCLUDED
    


    Personnage.cpp

    #include "Personnage.h"
    #include <string>
    
    using namespace std;
    
    Personnage::Personnage() : m_vie(100), m_mana(100), m_quantitePotion(3)
    {
    
    }
    
    Personnage::Personnage(string nomArme, int degatsArme) : m_vie(100), m_mana(100), m_arme(nomArme, degatsArme), m_quantitePotion(3)
    {
    
    }
    
    Personnage::Personnage(int vie, int mana, int quantitePotion) : m_vie(vie), m_mana(mana), m_quantitePotion(quantitePotion)
    {
    
    }
    
    void Personnage::attaquer(Personnage &cible)
    {
        cible.recevoirDegats(m_arme.getDegats());
    }
    
    void Personnage::lancerSort(Personnage &cible)
    {
        if (m_mana >= 10)
        {
            cible.recevoirDegats(25);
            m_mana -= 10;
        }
    }
    
    void Personnage::recevoirDegats(int nbDegats)
    {
        m_vie -= nbDegats;
    
        if (m_vie < 0)
        {
            m_vie = 0;
        }
    }
    
    void Personnage::boirePotionVie(int soinPotion)
    {
        if (m_quantitePotion > 0)
        {
            m_vie += soinPotion;
            m_quantitePotion--;
    
            if (m_vie > 100)
            {
                m_vie = 100;
            }
        }
    }
    
    void Personnage::changerArme(string nomNouvelleArme, int degatsNouvelleArme)
    {
        m_arme.changer(nomNouvelleArme, degatsNouvelleArme);
    }
    
    bool Personnage::estVivant() const
    {
        return m_vie > 0;
    }
    
    void Personnage::afficherEtat() const
    {
        cout << "Vie : " << m_vie << endl;
        cout << "Mana : " << m_mana << endl;
        m_arme.afficher();
    }
    



    Arme.h

    #ifndef ARME_H_INCLUDED
    #define ARME_H_INCLUDED
    
    #include <iostream>
    #include <string>
    
    class Arme
    {
    public:
    
        Arme();
        Arme(std::string nom, int degats);
        void changer(std::string nom, int degats);
        void afficher() const;
        int getDegats() const;
    
    private:
    
        std::string m_nom;
        int m_degats;
    };
    
    #endif // ARME_H_INCLUDED

    Arme.cpp

    #include "Arme.h"
    
    using namespace std;
    
    Arme::Arme() : m_nom("Épée rouillée"), m_degats(10)
    {
    
    }
    
    Arme::Arme(string nom, int degats) : m_nom(nom), m_degats(degats)
    {
    
    }
    
    void Arme::changer(string nom, int degats)
    {
        m_nom = nom;
        m_degats = degats;
    }
    
    void Arme::afficher() const
    {
        cout << "Arme : " << m_nom << " (Dégâts : " << m_degats << ")" << endl;
    }
    
    int Arme::getDegats() const
    {
        return m_degats;
    }

    J'obtiens un magnifique:

    Line 14: error: statement cannot resolve address of overload function

    Je soupçonne fortement les deux constructeurs surchargés mais j'aimerais avoir une confirmation, une solution, et j'aimerais aussi savoir pourquoi l'erreur se produit à cet endroit et pas à la création de l'objet.

    Merci d'avance 

    PS:Désolé si j'ai dit des bêtises, il est 1h45 du matin ^^

    Edit: Je viens de retrouver ce sujet que j'ai ouvert et j'avoue avoir un peu honte, j'essaierai de ne PAS ouvrir de sujets à 1h45 du matin à l'avenir

    -
    Edité par RémiNeur 26 mars 2020 à 14:40:04

    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2018 à 10:43:19

      squelette.afficherEtat;
      Il manque pas deux trucs la ?
      • Partager sur Facebook
      • Partager sur Twitter

      Surcharge de constructeur ?

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown