Pbm en C++

Fermé
klomera - 7 oct. 2009 à 14:12
 loupius - 7 oct. 2009 à 16:38
Bonjour,
j'ai un exercice pour mon cour et je ne trouve pas les erreurs voici mon code en C++:

//Le programme de crée 2 objets joueurs, de les afficher ( nombre de points = 0 ).
//Ensuite on saisit le score de chaque joueur et on affiche le gagnant et la meme des points.

//Statique et Dynamique.



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>

class joueur
{
private :

char nom[20];
int points;

public :
joueur(char *nom, int points);
char *getnom();
int getpoints();
void setnom(char *nom);
void setpoints(int points);
void Affiche();
};


joueur::joueur(char *nom, int points)
{
strcpy (this->nom,nom);
this -> points=points;
};

char joueur::*getnom()
{
return *nom;
};

int joueur:: getpoints()
{
return points;
};

void joueur:: setnom(char *nom)
{
return joueur.nom=nom;
};

void joueur:: setpoints(int points)
{
return joueur.points=points;
};

void joueur:: affiche()
{
cout<< nom << points;
};

3 réponses

Il est d'usage de nommer les classes avec une majuscule, ici 'Joueur'.
La fonction 'Affiche' est définie ensuite en tant qu' 'affiche'.
Il y a 2 fonctions 'void' qui retournent quelque chose !
char joueur::*getnom() se déclare plutôt comme 'char* joueur::getnom()'.
joueur.nom=nom n'a aucuns signification; il faut mettre 'this->nom = nom'.
strcpy (this->nom,nom); n'est pas très sécurisé et restrictif. C'est justement dans la classe qu'il faut faire les contrôles nécessaires et les réservations mémoires adéquates; dommage de ne pas en profiter.
Bonne continuation.
0
Hé, loupius, tu en as oublié ! Il faut dire qu'il y en a tant !!!
return *nom, non c'est 'return nom;';
this->nom = nom, non c'est 'strcpy(this->nom, nom);'.
Comme aucun espace de nommage n'est défini, il faut mettre 'std:cout'.
Bon après-midi.
0
klomera > loupius
7 oct. 2009 à 15:24
merci loupius mais il me met une erreur ici :

void joueur::setnom(char *nom)
{
return strcpy(this->nom,nom);
};

au niveau du return.

Merci
0
loupius > klomera
7 oct. 2009 à 15:30
Une fonction 'void' ne retourne rien !
0
klomera > loupius
7 oct. 2009 à 15:35
je dois mettre quoi alors ?
0
loupius > klomera
7 oct. 2009 à 15:47
Rien !
0
Mais il me met une erreur ici :

char* joueur::getnom()
{
return *nom;
};

J'ai fait la modif que tu ma dit mais il me met la ligne d'erreur sur le returne :s

Merci de m'avoir répondu.
0
Voila, je compile, il ne me sort pas d'éreur et il ne se passe rien donc je pense que c'est bon il faut que je face le main, voici mon code final d'après vos réponses et si j'ai bien compris lol :

//Le programme de crée 2 objets joueurs, de les afficher ( nombre de points = 0 ).
//Ensuite on saisit le score de chaque joueur et on affiche le gagnant et la meme des points.

//Statique et Dynamique.



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>

class joueur
{
private :

char nom[20];
int points;

public :
joueur(char *nom, int points);
char *getnom();
int getpoints();
void setnom(char *nom);
void setpoints(int points);
void affiche();
};


joueur::joueur(char *nom, int points)
{
strcpy(this->nom,nom);
this->points=points;
};

char* joueur::getnom()
{
return nom;
};

int joueur::getpoints()
{
return points;
};

void joueur::setnom(char *nom)
{

};

void joueur::setpoints(int points)
{

};

void joueur::affiche()
{

};
0
Une fonction qui ne retourne rien, ne signifie pas que le corps de cette fonction ne contient rien; sinon, à quoi la fonction sert-elle ?
Par exemple:
void joueur::setpoints(int points)
{
  this->points = points;
};
D'autre part si la création d'un joueur se fait avec 0 points, il serait préférable de créer ainsi le constructeur, avec suppression du tableau 'nom':
class Joueur
{
  private :
    char* nom;
    int points;
  public :
    Joueur(char* nomJoueur);
    ~Joueur { free(nom); }
    void setNom(char* nouveauNom);
    ...
};

Joueur::Joueur(char* nomJoueur)
{
  points = 0;
  nom = 0;
  setNom(nomJoueur);
}

Joueur::setNom(char* nouveauNom)
{
  free(nom);
  nom = malloc(strlen(nomJoueur)+1);
  strcpy (nom, nomJoueur);
}
Les autres fonctions sont inchangées.
Bonne continuation.
0