Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2334 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Résolu] Redéfinition de l'operateur << pour ofstream

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Redéfinition de l'operateur << pour ofstream

n°1258185
LePhasme
Les Belges domineront le monde
Posté le 03-12-2005 à 20:07:52  profilanswer
 

Bonjour, j'ai un problème avec la rédéfinition de l'opérateur << pour un ofstream, tout compile sans problème seulement à l'écriture il ne passe pas dans la redéfinition. Alors que les arguments sont ( me semblent ) corrects.

 

Voici le code :

 
Code :
  1. // Le main :
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include "Client.h"
  7. #include "ClientAbonne.h"
  8. #include "Oeuvre.h"
  9. #include "Representation.h"
  10. #include "Reservation.h"
  11. #include "ReservationGroupee.h"
  12. #include "Menu.h"
  13. using namespace std;
  14. int main ( void )
  15. {
  16. vector<Client *> listeCli;
  17. vector<Oeuvre> listeSpec;
  18. Client * cl  = new Client("scalzo","Loris","rue test","06400" );
  19. Oeuvre sp("les miserables","Victor Hugo" );
  20. Oeuvre sp2("l'avare","Moliere" );
  21. Representation rp("12/10/2005","16h00" );
  22. sp.ajouterRepresentation(&rp);
  23. listeSpec.push_back(sp);
  24. listeSpec.push_back(sp2);
  25. listeCli.push_back(cl);
  26. ... // pas besoin du code ici, il s'agit simplement de la gestion d'un menu.
  27. ofstream ecriture("clients_reservations.dat", ios::out );
  28. for ( int i = 0; i < listeCli.size(); i++ )
  29. {
  30.   ecriture << listeCli[i]  // ici il devrait passer dans la redéfinition.
  31. }
  32. return 0;
  33. }
  34. // le fichier Client.h
  35. #ifndef CLIENT_H
  36. #define CLIENT_H
  37. #include <iostream>
  38. #include <fstream>
  39. #include <string>
  40. #include <vector>
  41. #include "Reservation.h"
  42. using namespace std;
  43. class Client
  44. {
  45. private :
  46.   string nom, prenom, adresse, numtel;
  47.   vector <Reservation *> liste;
  48.  
  49. public :
  50.   Client();
  51.   Client ( string, string, string, string );
  52.   Client( const Client & );
  53.   ~Client();
  54.   void modifier();
  55.   virtual void affiche();
  56.   virtual void afficheReservation();
  57.   virtual void ajouterReservation(Reservation *);
  58.   virtual void modifierReservation( int, Reservation * );
  59.   virtual void listeReservation();
  60.   int getNombreReservations();
  61.   virtual void supprimerReservation(int );
  62.   virtual ostream & ecriture ( ofstream & );
  63.   const string getNom();
  64.   const string getPrenom();
  65.   const string getAdresse();
  66.   const string getNumtel();
  67.   void setNom(string);
  68.   void setPrenom(string);
  69.   void setAdresse(string);
  70.   void setNumtel(string);
  71. };
  72. #endif
  73. // la partie utile de Client.cpp :
  74. ostream & Client::ecriture(ofstream & o )
  75. {
  76. return o << nom << "\t" << prenom << "\t";
  77. }
  78. ostream & operator<< (ofstream &o,  Client * c )
  79. {
  80. cout << "passage redef";
  81. return o << c->ecriture( o ) ;
  82. }
 

Si vous pensez avoir besoin d'autres parties de codes n'hésitez pas à me demander.


Message édité par LePhasme le 29-12-2008 à 18:38:36
mood
Publicité
Posté le 03-12-2005 à 20:07:52  profilanswer
 

n°1258241
Taz
bisounours-codeur
Posté le 03-12-2005 à 22:36:11  profilanswer
 

la signature doit être
 
ostream& operator<<(ostream&, const T & );

n°1258266
LePhasme
Les Belges domineront le monde
Posté le 03-12-2005 à 23:14:22  profilanswer
 

En effet, j'ai du rêgler un problème de const suite aux modifs, je ne pensais pas que la forme de cette signature était obligatoire.
 
Merci beaucoup de ton aide.
 
Solution si jamais quelqu'un d'autre est interessé :
 

Code :
  1. // fichier.h  
  2. #ifndef CLIENT_H
  3. #define CLIENT_H
  4. #include <iostream>
  5. #include <fstream>
  6. #include <string>
  7. #include <vector>
  8. #include "Reservation.h"
  9. using namespace std;
  10. class Client
  11. {
  12. private :
  13.   string nom, prenom, adresse, numtel;
  14.   vector <Reservation *> liste;
  15.  
  16. public :
  17.   virtual void listeReservation();
  18.   int getNombreReservations();
  19.   virtual void supprimerReservation(int );
  20.   virtual  ostream & ecriture ( ostream & ) const; // déclarationde la fonction virtuelle
  21. };
  22. inline ostream & operator<< (ostream &o, const Client & c ) // definition de la surcharge
  23. {
  24. c.ecriture(o);
  25. return o ;
  26. }
  27. #endif
  28. // fichier .cpp
  29. ostream & Client::ecriture(ostream & o ) const // définition de la fonction virtuelle
  30. {
  31. return o << nom << "\t" << prenom << "\t" << adresse << "\t" << numtel << "\t" << endl;
  32. }
  33. // main identique a avant, je reposte juste la partie interessante.
  34. for ( int i = 0; i < listeCli.size(); i++ )
  35. {
  36.   ecriture << *listeCli[i];
  37. }
  38. return 0;
  39. }


Message édité par LePhasme le 04-12-2005 à 10:46:16

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Résolu] Redéfinition de l'operateur << pour ofstream

 

Sujets relatifs
[Résolu]Ajouter des lignes a un tableau par génération interne[Résolu] Numéro d'erreur de listing de répertoire ?
Xml / ISO et python qui veut pas des caractères non ascii [Résolu][résolu] Problème d'affichage dans email envoyé via un formulaire.
opérateur de comparaison[Résolu!] Besoin de cours en C++ sur Marseille
[PL/SQL] Curseur et boucles FOR imbriquées [Résolu][VB6] *Résolu* Repère d'une PictureBox
[resolu][access]sous formulaire si case a cocher[résolu] Requete MySQL : problème d'affichage par catégorie
Plus de sujets relatifs à : [Résolu] Redéfinition de l'operateur << pour ofstream


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR