No match for 'operator<<' in 'flux <<[...]' [Résolu]

Signaler
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010
-
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010
-
Bonsoir à tous,

Je pensais avoir correctement surchargé les opérateurs ">>" et "<<" mais le compilateur n'est pas du même avis. Voici mon code source :

billetentree.cpp

#include "billetentree.h" 

using namespace std;

ofstream& operator<< (ofstream & flux, BilletEntree& be)
{
    flux<

using namespace std;

class BilletEntree
{
    friend ofstream& operator << (ofstream&, BilletEntree&);
    friend ostream& operator<< (ostream&, BilletEntree&);

    private :
        char* numeroBillet;
        char* nomVisiteur;
        char* prenomVisiteur;
        char* dateBillet;
        
    public:
        char* getnumeroBillet() {return numeroBillet;}
        char* getdateBillet() {return dateBillet;} 
        char* getnomVisiteur() {return nomVisiteur;}
        char* getprenomVisiteur() {return prenomVisiteur;}

[...]

#endif


Lors de la compilation, je reçois donc un gentil :
no match for 'operator<<' in 'flux << (+be)->BilletEntree::getnumeroBillet()'

Quelqu'un a-t-il une idée pour solutionner mon problème ??

2 réponses

Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
using namespace std;

Beurk ! N'utilise jamais ceci ! Dès que je pourrais poster mon tuto, je t'enverrais un lien sur la raison à ceci. Préfère indiquer directement std::cout ou alors marquer using std::cout; using std::endl; dans une portée limitée.

no match for 'operator<<' in 'flux << (+be)->BilletEntree::getnumeroBillet()'


Alors là, il y a juste plein de petite erreurs qui se sont accumulées:
* #include <fstream> manquant
* <<<< au lieu de <<
* Pas de constitude (pas obligatoire, mais c'est vraiment plus propre)

Correction:

billetentree.hh
#ifndef BILLETENTREE_HH_
# define BILLETENTREE_HH_

#include 

class BilletEntree
{
  friend std::ofstream& operator << (std::ofstream& flux, const BilletEntree& be);
  friend std::ostream& operator<< (std::ostream& flux, const BilletEntree& be);

private :
  char* numeroBillet;
  char* nomVisiteur;
  char* prenomVisiteur;
  char* dateBillet;

public:
  char* getnumeroBillet() const {return numeroBillet;}
  char* getdateBillet() const {return dateBillet;}
  char* getnomVisiteur() const {return nomVisiteur;}
  char* getprenomVisiteur() const {return prenomVisiteur;}
};

#endif /* !BILLETENTREE_HH_ */


billetentree.cc
#include "billetentree.hh"

#include <fstream>

std::ofstream& operator<< (std::ofstream& flux, const BilletEntree& be)
{
  flux << be.getnumeroBillet() << "\n"
       << be.getnomVisiteur() << "\n"
       << be.getprenomVisiteur() << "\n"
       << be.getdateBillet()
       << "\n****\n\n";
  return flux;
}

std::ostream& operator<< (std::ostream& flux, const BilletEntree& be)
{
  flux << "Numero de billet : " << be.getnumeroBillet() << std::endl
       << "Nom : " << be.getnomVisiteur() << std::endl
       << "Prenom : " << be.getprenomVisiteur() << std::endl
       << "Date d'echeance : " << be.getdateBillet() << std::endl
       << std::endl;
  return flux;
}


Une question, tout de même: pourquoi utiliser des char* alors qu'il y a des std::string, bien meilleurs ?
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010

Merci pour la réponse !

Je ne sais pas, c'est une question d'habitude. Je n'ai pas beaucoup programmé en C++, juste quelques projets pour l'école (dont celui-ci) et j'ai pris la (mauvaise ?) habitude d'utiliser des char*.