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

Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
Dernière intervention
6 janvier 2010
- - Dernière réponse : mliuej
Messages postés
9
Date d'inscription
dimanche 27 décembre 2009
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
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
164
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 118 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
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.