Probleme pointeur sur classe et méthodes

Fermé
eddynamique - 2 mai 2008 à 17:54
 eddynamique - 3 mai 2008 à 15:29
Bonjour,

Voila le code de ma fonction test :

void test ()
{

	Joueur eddy ("eddy","DK");
	
	string nom = eddy.getNom();
	string perso = eddy.getPersonnage();
	
		cout << "Nom : " << nom << "   Perso : " << perso << endl;	

}


Mon fichier Joueur.h :

#include <iostream>

using namespace std;

class Joueur
{

	private: 
		
		int nbVictoire;
		int nbDefaite;
		int point;
		int place;
		string nom;
		string personnage;
		
		
	public:
	
	
		 Joueur (string nom, string personnage);
		 ~Joueur () {}
		int getNbVictoire () {return nbVictoire;}
		int getNbDefaite () {return nbDefaite;}
		int getPoint () {return point;}
		int getPlace () {return place;}
		string getNom () {return nom;}
		string getPersonnage () {return personnage;}
		

};




Et le constructeur de Joueur :

#include "Joueur.h"


Joueur::Joueur (string nom, string personnage)
{

	    nbVictoire = 0;
		nbDefaite = 0;
		point = 0;
		place = 0;
		nom = nom;
		personnage = personnage;

}



Voila, donc mon problème, c'est que quand je compile et j'execute, on dirai que mes appel de méthodes ne fonctionnent pas.... Voila ce que j'ai dans ma console :


Nom :    Perso :    

1 réponse

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
2 mai 2008 à 19:52
Bonjour,

Il y a une ambiguïté à lever entre le nom des paramètres dans le constructeur et le nom des variables membres privées.

Joueur::Joueur (string nom, string personnage)
{
	...
	this->nom = nom;
	this->personnage = personnage;

}


Dans toute méthode le pointeur this désigne l'adresse de l'instance sur laquelle la méthode a été appelée.

Une autre solution est d'adopter une convention d'écriture non ambiguë.
La notation hongroise (voir sur Wikipédia) préconise un "m_" comme préfixe d'une variable membre.

private:
	std::string m_sNom;


portée _ Type|Nom

int g_iTheNumber; // entier signé global
unsigned int m_uNumNames; // entier non signé membre d'une classe
char cMyLetter // caractère paramètre ou variable locale.

M.
0
Merci beaucoup ! J'ai utilisé la méthode avec "this", en fait je pensais que le nom des paramètres n'étaient pas très important, je ne pensais pas qu'il pouvaient créer un conflit avec les attributs privés... En tout cas, merci !

eddy
0