Salut je suit le cours de C++ de Openclassroom, je suis au chapitre 16 (Surchargez un opérateur). Le problème que je rencontre avec mon code est le suivant:
Mon projet est en 3 fichier pour creer la classe Character(le main.cpp, Charactere.h et Charatere.cpp), je cherche a implémenter l'operateur << (avec cout) pour afficher tous les attributs de n'importes quels objets venant de la classe Charactere (chaque objet de cette classe a 3 attributs: un nom, un métier et un âge) pour les afficher dans la console.
Mais mon EPI indique que la fonction operator<<() ne marche pas. Normalement il y a que une (ou plusieurs ce que je redoute) erreur(s) dans mon code en particulier sur l'implémentation de l'operateur<<() (je pense a un std:: manquant ou un truc comme ça), il appelle une méthode dans la classe Character pour accéder au attributs. Les autres méthodes marchaient très bien avant l'arriver de l'opérateur mais au cas ou je vous met les 3 fichiers.
j'ai tout essayé rajouter des std:: ou je pensait qu'il en manquer et pleins d'autres choses différentes mais le problème et toujours présent. Help me!!
le fichier principal main.cpp
#include <iostream>
#include <string>
#include "Charactere.h"
using namespace std;
int main() {
Charactere tom; //je declare l'objet " tom"
cout << tom.getJob() << endl; //grâce à la méthode .getJob() j'ai sonmétier
tom.changeJob("policier"); //grâce à la méthode .changeJob() je change son métier
cout << tom.getJob() << " " << tom.getName() << endl; //grâce à la méthode .getName() j'ai sonnom
tom.getYearsOld(); //grâce à la méthode .getYearsOld() j'ai son age
tom.addYearsOld(5); //grâce à la méthode .addYeatsOld() je lui fair prendre de l'age
cout << tom; //cette ligne devrait renvoyé tous les attributs d'un objet Charactere
return 0;
}
le header pour la classe Charactere.h
#ifndef CHARACTERE_H
#define CHARACTERE_H
#include <iostream>
#include <string>
//implementation de l'opérateur <<
ostream &operator<<(ostream &flux, Charactere const& charactereFlux){
charactereFlux.showFlux(flux);
return flux;
}
//la classe pour les objets Charactere
class Charactere{
public:
//constructor
Charactere();
//get the name of Charactere
std::string getName() const;
//change or get the job of charactere
void changeJob(std::string &newJob);
std::string getJob() const;
//add or get the years of charactere
void addYearsOld(int addX = 1);
int getYearsOld();
//prothotype de la méthode void pour "cout" les attributs
void showFlux(std::ostream &flux)const;
private:
//les attributs
std::string m_name;
std::string m_job;
int m_yearsOld;
};
#endif
et le Charactere.cpp
#include "Charactere.h"
#include <iostream>
#include <string>
using namespace std;
//les méthodes qui marcheent
//retourne le nom
string Charactere::getName() const{
return m_name;
}
//change le job
void Charactere::changeJob(string &newJob){
m_job = newJob;
}
//retourne le job
string Charactere::getJob() const{
return m_job;
}
//le fait grandir
void Charactere::addYearsOld(int addX){
m_yearsOld += addX;
}
//retourne son age
int Charactere::getYearsOld(){
cout << m_yearsOld;
}
//constructeur par default
Charactere::Charactere(): m_name("Tom"), m_job("Sans emploie"), m_yearsOld(18){
}
//methode pour retourner tous les attribus de l'objet Charactère
void Charactere::showFlux(ostream &flux)const{
flux << m_name << " " << m_job << " " << m_yearsOld;
}
× 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.
git is great because Linus did it, mercurial is better because he didn't.