Partage
  • Partager sur Facebook
  • Partager sur Twitter

AIDE (Probleme d'utilisation des classes)

Sujet résolu
    26 janvier 2019 à 16:22:56

    Bonjour a tous. Je commence le c++ et j'essaie de créer un programme en m'inspirant du cours sur les classes. Cependant j'ai une erreur que je n'arrive pas a résoudre, et je ne comprend pas pourquoi ca ne marche pas :/

    Pour info, j'utilise Visual Studio comme IDE, je ne sais pas si ca change quelque chose.

    Voici le message d'erreur obtenu: 

    1>c:\users\maell\desktop\programmation\prog\rpg\rpg\main.cpp(16): error C2079: 'Player' utilise une class de 'main::Personnage' non défini

    Voci mon code en entier, comme je ne sais pas pourquoi ca ne marche pas, je vous met tout en entier

    #include <iostream>
    #include "main.h"
    #include "Personnage.h"
    
    int main()
    {
    	
    	//Creation des classes
    	class Personnage;
    	class Weapon;
    	class Shield;
    	//ok
    
    	std::string nomPersonnage;
    	nomPersonnage = f_namePlayer(); //Met le nom du joueur dans nomPersonnage
    	Personnage Player(200);
    	std::cout << nomPersonnage<<endl;
    
    	system("PAUSE");
    
    
    
    
    		return 0;
    }

    main.cpp

    #pragma once
    #include <iostream>
    #include <string>
    
    #define endl "\n"
    
    #ifndef MAIN_H
    #define MAIN_H
    
    std::string f_namePlayer()
    {
    	std::string namePlayer("");
    	std::cout << "Quel est le nom de vore personnage?" << endl;
    	std::cin >> namePlayer;
    	std::cout << endl;
    	return namePlayer;
    }
    
    #endif

    main.h

    #include <iostream>
    #include <string>
    #include "Personnage.h"
    
    #define endl "\n"
    Personnage::Personnage() :a_name("PLAYER"), a_vie(1000), a_vieMax(1000), a_mana(100), a_manaMax(100)
    {
    
    }
    Personnage::Personnage(int vie) : a_name("PLAYER"),a_vie(vie),a_vieMax(1000),a_mana(100),a_manaMax(100)
    {
    
    }//Constructeur
    Personnage::~Personnage()
    {
    
    }
    
    
    int Personnage:: getVie() const
    {
    	return a_vie;
    }
    int Personnage:: getVieMax() const
    {
    	return a_vieMax;
    }
    int Personnage:: getMana() const
    {
    	return a_mana;
    }
    int Personnage:: getManaMax() const
    {
    	return a_manaMax;
    }
    void Personnage::showProfil() const
    {
    	std::cout << a_name << ":" << endl;
    	std::cout << "Vie: " << a_vie << "/" << a_vieMax << endl;
    	std::cout << "Mana: " << a_mana << "/" << a_manaMax << endl;
    
    }

    Personnage.cpp

    #pragma once
    #include <iostream>
    #include <string>
    
    #define endl "\n"
    
    #ifndef PERSONNAGE_H
    #define PERSONNAGE_H
    
    class Personnage
    {
    public:
    	Personnage(); //Constructeur
    	Personnage(int vie);
    	~Personnage(); //Destructeur
    
    	//Methode:
    	
    	int getVie() const;
    	int getVieMax() const;
    	int getMana() const;
    	int getManaMax() const;
    	void showProfil()const;
    
    protected:
    	//Attribut:
    	std::string a_name ;
    	int a_vie,a_vieMax;
    	int a_mana, a_manaMax;
    
    
    
    private:
    
    
    };
    
    #endif
    

    Personnage.h

    PS: Quand j'enleve le 200 dans Personnage Player(200); , le programme marche mais je ne peut donc pas initialiser mon objet avec la valeur que je veut :/

    A la base je voulait mettre comme argument un string(), mais comme ca ne marchait pas, j'ai essaye avec un int (car je sais qu'il est plus complique d'utilise un string que un int). Cependant ca ne marche pas non plus. Je pense que l'erreur doit se trouver dans le Personnage.h ou dans le Personnage.cpp ( ou les deux )

    Voila, il y a tout. Merci d'avance d'avoir tout lu et de me répondre si possible.




    -
    Edité par MaelMathurin5 26 janvier 2019 à 16:27:56

    • Partager sur Facebook
    • Partager sur Twitter
      26 janvier 2019 à 18:23:20

      Tu as oublié de poster Player.h.

      D'après la description que tu nous fait, la classe Player ne connais pas la classe Personnage.
      Il suffit d'inclure l'entête adéquat.

      PS: En C++ on ne parle pas de d'attributs ni de méthodes, mais de variables et de fonctions membres.

      MaelMathurin5 à écrit:

      #define endl "\n"

      Tu vas te faire tapper sur les doigts.

      Autre remarque:
      Il n'est pas de la responsabilité de la classe Personnage de s'afficher elle-même.

      -
      Edité par Deedolith 26 janvier 2019 à 18:23:32

      • Partager sur Facebook
      • Partager sur Twitter
        26 janvier 2019 à 19:30:11

        OK, apres verificaion et comparaison du projet RPG a téléchargé qu'il nous a donné dans le cours, j'ai trouvé mon erreur.

        Elle se situe ici:

            class Personnage;
        

        Comme je la créer une premiere fois dans le fichier.h, il ne doit pas apprécier que je l'incluse ici aussi. Bref, en supprimant cette portion, mon code marche parfaitement. Merci a toi de m'avoir repondu ;)



        -
        Edité par MaelMathurin5 26 janvier 2019 à 23:40:11

        • Partager sur Facebook
        • Partager sur Twitter

        AIDE (Probleme d'utilisation des classes)

        × 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