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

mliuej 9 Messages postés dimanche 27 décembre 2009Date d'inscription 6 janvier 2010 Dernière intervention - 27 déc. 2009 à 17:57 - Dernière réponse : mliuej 9 Messages postés dimanche 27 décembre 2009Date d'inscription 6 janvier 2010 Dernière intervention
- 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
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 28 déc. 2009 à 14:14
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 ?

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

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