Partage
  • Partager sur Facebook
  • Partager sur Twitter

Soucis de redéfinition dans le cpp file

CPP file de mes fonctions

Sujet résolu
    15 septembre 2018 à 15:52:48

    Salut à tous et toutes, 

    Je fais le cours sur les classes d'Open Classroom en vue d'un projet qui en nécessitera et donc en m'exerçant sur l'un des exemples j'ai un souci de redéfinition d'une de mes Class dans le fichier CPP et je ne sais pas comment le résoudre (je vous promets que j'ai cherché en ligne avant de venir ici).

    Du coup je vous montre ce que j'ai fait :

    Fichier .h :

    #ifndef PERSONNAGE_H_INCLUDED
    #define PERSONNAGE_H_INCLUDED
    #include <string>
    class Personnage {
    
        private :
        //Attributs  (c'est comme les variables juste pour la classe, comme les structures)
        int m_vie;      //ajouter le "m_" pour distinguer variables et membres
        int m_mana;
        std::string m_nomArme;
        int m_degatsArme;
     // TOUS LES ATTRIBUTS D'UNE CLASSE DOIVENT ETRE ATTRIBUÉS PRIVATE
        public :
        //Méthodes
        void recevoirDegats (int nbDegats);
        void attaquer (Personnage &cible);
        void boirePotionDeVie (int quantitePotion);
        void changerArme (std::string nouvelleArme, int nouveauDegats);
        bool resterVie (int m_vie);
    
    };
    
    
    #endif // PERSONNAGE_H_INCLUDED
    

    Et le fichier .cpp

    #include "Personnage.h"
    #include <string>
    using namespace std;
    class Personnage {
    
        private :
    
        //Attributs  (c'est comme les variables juste pour la classe, comme les structures)
        int m_vie;      //ajouter le "m_" pour distinguer variables et membres
        int m_mana;
        string m_nomArme;
        int m_degatsArme;
     // TOUS LES ATTRIBUTS D'UNE CLASSE DOIVENT ETRE ATTRIBUÉS PRIVATE
        public :
        //Méthodes
        void Personnage::recevoirDegats (int nbDegats)
        {
            m_vie=m_vie-nbDegats;
        }
    
        void Personnage::attaquer (Personnage &cible)
        {
            cible.m_vie=cible.m_vie-m_degatsArme;
        }
    
        void Personnage::boirePotionDeVie (int quantitePotion)
        {
            m_vie=m_vie+quantitePotion;
        }
    
        void Personnage::changerArme (string nouvelleArme, int nouveauDegat)
        {
            m_nomArme=nouvelleArme;
            m_degatsArme=nouveauDegat;
        }
    
        bool resterVie (int m_vie)
        {
            if (m_vie==0)
            {
                cout <<"Game over";
                }
            else true;
        }
    
    };
    

    L'erreur que me sort le compilateur du coup est : "error redefinition of class Personnage (dans le cpp du coup)/ previous definition of class Personnage (et me renvoie à la déclaration dans le header du coup) et je vous avoue que je me trouve perdu face à une telle situation.

    Merci beaucoup en attendant et j'espère apprendre de mes erreurs!


    • Partager sur Facebook
    • Partager sur Twitter
      15 septembre 2018 à 16:36:48

      Hello,

      Oui c'est normal, grosso-modo dans un fichier .hpp on déclare la classe et dans un fichier .cpp on définit ses fonctions. Là dans ton fichier .cpp tu redéclares la classe... Donc forcément ça coince ^^.

      Typiquement ça se présente comme ça :

      Personnage.hpp (déclaration)

      #ifndef PERSONNAGE_HPP_INCLUDED
      #define PERSONNAGE_HPP_INCLUDED
      
      #include <string>
      
      class Personnage
      {
      public:
          Personnage(const std::string& name);
          void print() const;
      
      private:
          std::string m_name{};
      };
      
      #endif // PERSONNAGE_HPP_INCLUDED

      Personnage.cpp (définition)

      #include "Personnage.hpp"
      #include <iostream>
      
      Personnage::Personnage(const std::string& name) : m_name{name}
      {
      
      }
      
      void Personnage::print() const
      {
          std::cout << "Je m'appelle " << m_name << '\n';
      }

      Aussi, n'utilise pas using namespace std; c'est une mauvaise pratique (voir ici pourquoi).

      Autre chose, je dois t'annoncer une mauvaise nouvelle. Le cours d'OC est obsolète (c'est du très vieux C++) et il est rempli d'inepties. Je te conseille fortement de te pencher sur d'autres cours. Il y en 2 qui sortent du lot :

      • Le cours de @gbdivers -> ici (il est en cours d'écriture mais bien mieux que celui d'OC et à jour)
      • Le bouquin C++ Primer 5th Edition de S. Lippmann (en anglais mais complet)

      -
      Edité par Guit0Xx 15 septembre 2018 à 16:41:43

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        15 septembre 2018 à 17:29:04

        Ah bah oui! Et merci encore pour les conseils sur les autres j'y jetterai un oeil!
        • Partager sur Facebook
        • Partager sur Twitter

        Soucis de redéfinition dans le cpp file

        × 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