Pbm en C++

klomera -  
 loupius -
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;
};
Configuration: Windows XP
Firefox 3.0.14

3 réponses

  1. loupius
     
    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
    1. loupius
       
      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
      1. klomera > loupius
         
        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
      2. loupius > klomera
         
        Une fonction 'void' ne retourne rien !
        0
      3. klomera > loupius
         
        je dois mettre quoi alors ?
        0
      4. loupius > klomera
         
        Rien !
        0
  2. klomera
     
    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
  3. klomera
     
    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
    1. loupius
       
      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