Bonsoir à tous et d'avance, désolé pour la longueur de ce post !
J'écris en ce moment une surcouche aux flux standards du C++ pour gérer l'UNICODE et un format personnel ('infotexte'). La classe infotexte peut s'utiliser pour la lecture seule ou pour la lecture et l'écriture.
Voici ma hiérarchie de classes :
(couche système) istream ostream
. .
(ma couche unicode) flux_in flux_out
. .
..............
.
(ma couche infotexte) infotexte
|
Le problème apparaît avec les constructeurs prévus pour la lecture seule (j'ai donc supprimé les autres constructeurs et beaucoup simplifié le code). Dans ce cas flux_out ne me sert à rien et j'ai donc créé un constructeur-bidon... Mais comment initialiser ostream ?
Code :
- // Classes de bases pour gérer l'UNICODE :
- class flux_in : public istream
- {
- flux_in(const char* fic_in);
- };
- flux_in::flux_in(const char* fic_in) : istream(0)
- { // [...] Initialisation de l'istream à partir du fichier
- // je termine par un
- ios::init(&ficbuff_in);
- }
- class flux_out : public ostream
- {
- flux_out(void); // Mon constructeur bidon.
- // flux_out(const char* fic_out) // Autre constructeur.
- };
- flux_out::flux_out(void) : ostream(0) // ????????????????????<= Problème (?)
- { // Pas d'initialisation pour ce constructeur.
- }
- // Classe INFOTEXTE pour gérer les textes selon un format de mon cru
- class infotexte : public flux_in, public flux_out
- {
- // Ouverture d'un fichier pour la lecture seulement
- infotexte(const char * fic);
- };
- infotexte::infotexte(const char * fic) : flux_in(fic), flux_out()
- {}
|
Quand je crée une instance de classe infotexte pour la lecture seule, le constructeur de flux_in est d'abord appelé et il ouvre correctement le fichier passé en argument. Puis le constructeur-bidon flux_out est appelé et ne fait rien. Mais quand le constructeur infotexte reprend la main, je me rend compte que mon flux d'entrée est fichu (rdstate() me renvoie badbit).
Je crois que c'est le fait d'appeler ostream(0) comme je le fais qui provoque une erreur. Si vous aviez une solution pour diriger ce flux vers un flux nul sans créer d'erreurs, merci beaucoup.
Message édité par suizokukan le 07-11-2004 à 19:38:57