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

Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010
- - Dernière réponse : mliuej
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010
- 28 déc. 2009 à 16:11
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 ??
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
3835
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
5 mai 2019
84
3
Merci
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 ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
6 janvier 2010
0
Merci
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*.
Commenter la réponse de mliuej