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

  FORUM HardWare.fr
  Programmation
  C++

  C++ operator << pour les ofstream

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ operator << pour les ofstream

n°1133418
LordHarryP​otter
Posté le 28-06-2005 à 11:45:35  profilanswer
 

Voilà, j'ai un problème réccurent et assez curieux (j'utilise visual c++ .net, mais je rois que sous g++ [donc sous linux] j'ai rencontrer le même problème) :
 

Code :
  1. ofstream& operator << (ofstream& str,const MeshnDPm& mesh)
  2. {
  3. str << mesh.nb_vertex << " " ;
  4. return str ;
  5. }


 
çà marche, çà compile
 
mais  
 

Code :
  1. ofstream& operator << (ofstream& str,const MeshnDPm& mesh)
  2. {
  3. str << " " << mesh.nb_vertex ;
  4. return str ;
  5. }


 
çà compile pas :  
"error C2666: 'operator`<<'' : 7 overloads have similar conversions"
 
Je peux remplacer le " " par n'importe quel chaine de caractère çà me fait toujours la même chose. La chose la plus pénible c'est que sur certain projet çà marche (les deux formes) et sur certains non.
 
Si quelqu'un a déjà rencontrer ce problème (et surtout à compris d'où çà venait) merci :D
 
 
EDIt : j'ai rajouter le return str mais je l'avais enlever ici pour que le code soit le plus petit possible :p


Message édité par LordHarryPotter le 28-06-2005 à 12:14:36
mood
Publicité
Posté le 28-06-2005 à 11:45:35  profilanswer
 

n°1133451
Taz
bisounours-codeur
Posté le 28-06-2005 à 12:03:46  profilanswer
 

bah bha bhbhahahshashd
 
on fais du polymorphisme :o
 
alors ton opérateur, ça signature, c'est
 
ostream& operator<<(ostream&, const T& );
 
et n'oublie pas le return !
 
 
tu m'étonnes que ça soit récurrent : c'est n'importe quoi juqu'à maintenant.

n°1133467
LordHarryP​otter
Posté le 28-06-2005 à 12:15:06  profilanswer
 

Non le plus chelou c'est que pour un ostream çà marche mais pas pour les ofstream& et oui j'ai pas oublier le return.
 
Sinon qu'est ce qu'est du n'importe quoi ?

n°1133487
Taz
bisounours-codeur
Posté le 28-06-2005 à 12:24:17  profilanswer
 

PARCE QU'ON NE SURCHARGE CET OPÉRATEUR QUE POUR LA BASE OSTREAM OU ISTREAM SELON.

n°1133489
LordHarryP​otter
Posté le 28-06-2005 à 12:25:52  profilanswer
 

:cry: et pourquoi on peut pas surcharger l'opérateur << pour les ofstream  :cry:

n°1133521
shikra
life is short,drink faster!!!
Posté le 28-06-2005 à 12:40:13  profilanswer
 

je pense a ca!
corrige moi taz si pas bon
 

Citation :

La classe ofstream : cette classe est dédiée aux écritures réalisées dans des fichiers. La classe ofstream est dérivée de la classe ostream et bénéficie donc de toutes les méthodes définies dans cette classe. Voici un exemple d'utilisation :
 
#include <iostream>
#include <fstream>
 
int main()
{
  // Deux modes d'ouverture sont possibles :
  //   - ios:: out -> création, fichier écrasé si existant
  //   - ios:: app -> ajout en fin de fichier
 
  ofstream fichierSortie("donnees.txt", ios:: out);
 
  // Test d'ouverture du fichier
 
  if (!fichierSortie) {
    cerr << "Problème d'ouverture de fichier" << endl;
    exit(1);
  }
 
  fichierSortie << "J'écris des caractères dans le fichier "
                << "et des nombres : " << 10 << " " << 20  
                << endl;
 
  // Fermeture du fichier
 
  fichierSortie.close();
}
 


Message édité par shikra le 28-06-2005 à 12:41:24

---------------
L'abus de programmation est dangereux pour la sante!!
n°1133534
theShockWa​ve
I work at a firm named Koslow
Posté le 28-06-2005 à 12:47:35  profilanswer
 

:heink: rapport avec le sujet ?
 
le problème qu'il a, c'est simplement qu'après une redirection non surchargée, il se retrouve avec un ostream, et non pas un ofstream, c'est là la source de tous ses déboires
 
Edit :  
qui plus est, c'est de mauvais goût, ce genre de choses

Citation :

ofstream fichierSortie("donnees.txt", ios:: out);

Et je ne parlerai pas du exit(1) ni même du fichiersortie.close()


Message édité par theShockWave le 28-06-2005 à 13:01:15
n°1133592
LordHarryP​otter
Posté le 28-06-2005 à 13:47:40  profilanswer
 

Okay, et dans ces cas là comment qu'on fai pour écrire dans un fichier : medite pas qu'il faut que je passe forcément par un fprintf ninia  :cry:  
 
Si je comprend bien la classe ofstream si çà marche tant mieux et si çà marche pas ben tant pis  :heink:

n°1133596
theShockWa​ve
I work at a firm named Koslow
Posté le 28-06-2005 à 13:49:59  profilanswer
 

une simple surcharge comme celle-ci ne te convient pas ?
 

Code :
  1. ostream& operator << (ostream& str,const MeshnDPm& mesh)
  2. {
  3. str << " " << mesh.nb_vertex ;
  4. return str ;
  5. }


 
Edit : note que je ne connais pas le type de nb_vertex, mais je suppose qu'il s'agit d'un type primitif pour lequel la surcharge de << est déjà faite, non ?
Edit 2 : c'est ce que Taz t'avait dit depuis le début :

Citation :

alors ton opérateur, ça signature, c'est
 
ostream& operator<<(ostream&, const T& );


Message édité par theShockWave le 28-06-2005 à 13:51:38
n°1133609
HelloWorld
Salut tout le monde!
Posté le 28-06-2005 à 14:00:12  profilanswer
 

Je crois qu'il n'a pas compris que ofstream hérite de ostream. Donc ce qui marche pour ostream marche pour ofstream.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 28-06-2005 à 14:00:12  profilanswer
 

n°1133613
slash33
Posté le 28-06-2005 à 14:02:01  profilanswer
 

Je dis peut-être une méga c**** mais tant pis:
Problème de const avec mesh.nb_vertex?
 
"error C2666: 'operator`<<'' : 7 overloads have similar conversions"
Et si tu cast mesh.nb_vertex?
 
Edit: oui bon puisque c'est un int, ni l'un, ni l'autre...


Message édité par slash33 le 28-06-2005 à 14:06:15
n°1133615
Taz
bisounours-codeur
Posté le 28-06-2005 à 14:03:39  profilanswer
 

...

n°1133616
LordHarryP​otter
Posté le 28-06-2005 à 14:04:06  profilanswer
 

theShockWave a écrit :

une simple surcharge comme celle-ci ne te convient pas ?
 

Code :
  1. ostream& operator << (ostream& str,const MeshnDPm& mesh)
  2. {
  3. str << " " << mesh.nb_vertex ;
  4. return str ;
  5. }


 
Edit : note que je ne connais pas le type de nb_vertex, mais je suppose qu'il s'agit d'un type primitif pour lequel la surcharge de << est déjà faite, non ?
Edit 2 : c'est ce que Taz t'avait dit depuis le début :

Citation :

alors ton opérateur, ça signature, c'est
 
ostream& operator<<(ostream&, const T& );



 
nb_... est un

Code :
  1. int

donc parfaitement primitif ;)
 
Je vais essayer mais je voulais faire deux méthodes distinctes (pour l'ostream typiquement utilisé via

Code :
  1. cout

écrire des information lisible alors qu'avec l'ofstrem je ne note que le strict minimum (pas de chaine de caractère autre que les blancs).
 
Mais sinon oui çà marche en ne mettant pas d'opérateur

Code :
  1. ofstream& operator << ...

n°1133637
Taz
bisounours-codeur
Posté le 28-06-2005 à 14:12:17  profilanswer
 

ostream est typiquement utilisé avec les ostream .|
ce que tu es fais, c'est naz, ça ne rime à rien. Si tu as besoin de deux formes de sérialization, et bien fais autrement. Mais pas comme ça. Un flux, c'est un flux, où qu'il soit. Faire des daubes uniquements pour les fstreams, c'est écrire des lignes pour rien.
 
Comment faire ? une fonction membre par type de sérialization, ou une classe Serilaizer qui t'aide  flux << My::serialize(obj) ... etc. Ou aussi les modificateur de flux.
 
 
Bref ton truc, ça ne marche pas.

n°1133706
LordHarryP​otter
Posté le 28-06-2005 à 14:45:10  profilanswer
 

Désolé Taz :(
 
En faite mon prof de tp de c++ nous avait appris à faire comme çà, donc c'est dur de perdre des vieilles habitudes.
 
J'ai retenu la leçon maintenant ;)

n°1133707
Taz
bisounours-codeur
Posté le 28-06-2005 à 14:45:55  profilanswer
 

j'avais déjà fait un topic pour faire un petit manipulateur de flux, c'est vachement sympatoche.

n°1133749
Taz
bisounours-codeur
Posté le 28-06-2005 à 15:02:16  profilanswer
 

J'espère que tu réalises bien la crêtinerie de ton prof quand même. Dans un vrai programme, a fortiori graphique, cout tu ne le verras jamais !

n°1133769
LordHarryP​otter
Posté le 28-06-2005 à 15:11:26  profilanswer
 

Ouais :o


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

  C++ operator << pour les ofstream

 

Sujets relatifs
[c++] Bool operator <[c++] erreur sur un ofstream.open(...)
Classe abstraite et operator<<Comportement de operator[] avec [][]
surcharger l'operator[] ???problème avec 'operator type();' : ambiguité
Overlord operator <<, aide svpComportement de ostream& operator<<(ostream&, basic_string)
nom de fichier variable? ofstream fich(var,ios::out),synthax macro?who 
Plus de sujets relatifs à : C++ operator << pour les ofstream


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)