IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Instancier [i/o]stream


Sujet :

C++

Vue hybride

jph_void Instancier [i/o]stream 21/08/2007, 15h41
Laurent Gomila Un flux n'est par défaut... 21/08/2007, 15h48
poukill char est une classe de trait... 21/08/2007, 15h51
jph_void poukill : Merci c'est... 21/08/2007, 17h16
Laurent Gomila Ah, ben ça veut dire que j'ai... 21/08/2007, 17h20
koala01 Salut, Je ne vois pas... 21/08/2007, 17h30
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut Instancier [i/o]stream
    Bonjour c'est une question toute bete :
    Comment puis-je faire pour instancier un ostream ou un istream sans pour autant qu'il soit connecté un a fichier ?

    J'ai cru comprendre qu'on pouvait en instancier sur une instance de streambuf mais je n'arrive pas non plus a instancier un streambuf

    Le compilateur me parle de "char_traits" ou "<CharT, _Traits>" et je ne vois pas trop ce que c'est... Donc question subsidiaire : que sont les "char_traits" ou "<CharT, _Traits>" ?

    Chers développeurs, cheres développeuses ; d'avance merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Un flux n'est par défaut connecté à aucun streambuf.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    char est une classe de trait pour les "char"...
    Voir le lien : http://alp.developpez.com/tutoriels/traitspolicies/

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    poukill : Merci c'est parfait, je regarde ça direct

    Laurent:
    Citation Envoyé par Laurent Gomila Voir le message
    Un flux n'est par défaut connecté à aucun streambuf.
    Ok ça me rassure d'un coté parce que l'utilisation d'un flux pur sera moins laborieuse que prévue ^^.
    En fait mon compilateur se plaint quand j'ajoute "std::ostream mystream;" en private a ma classe.

    Voici le message d'erreur : (gcc sous code::blocks)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/g++-v4/ostream:342: error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char, _Traits = std::char_traits<char>]' is protected
    MPacker.cpp:6: error: within this context
    /usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/g++-v4/ostream:342: error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char, _Traits = std::char_traits<char>]' is protected
    MPacker.cpp:9: error: within this context
    /usr/lib/gcc/i486-pc-linux-gnu/4.1.2/include/g++-v4/ostream:342: error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char, _Traits = std::char_traits<char>]' is protected
    MPacker.cpp:12: error: within this context
    :: === Build finished: 6 errors, 0 warnings ===
    et au cas ou voici les lignes 6 à 24 de mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    MPacker::MPacker(const char *s){
    	initClass(s);
    }
    MPacker::MPacker(string& s){
    	initClass(s.c_str());
    }
    MPacker::MPacker(MString& s){
    	initClass(s.toString());
    }
     
    MPacker::~MPacker(){
    	this->write();
    }
     
    void MPacker::initClass(const char *s){
    	this->canWrite=false;
    	this->iFields=0;
    	this->szFilename.assign(s);
    }

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ah, ben ça veut dire que j'ai dit une bêtise
    Apparemment on ne peut pas construire un flux par défaut, il lui faut obligatoirement un streambuf. Tu peux toujours tenter de passer NULL à son constructeur, mais je ne suis pas sûr du résultat.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 637
    Par défaut
    Salut,

    Je ne vois pas vraiment ce que tu veux faire...

    les istream et ostream sont en fait des variable globales dans l'espace de nomage std et sont "branchés" par défaut sur l'écran (pour ostream) ou sur le clavier (pour istream)

    (C'est sûrement pas tout à fait vrai ni tout à fait complet, mais le principe y est )

    Au mieux, tu peux les "rediriger" vers un autre périphérique ou vers autre chose, mais cela n'a que peu de sens de vouloir en faire un membre privé d'une classe bien précise.

    Si tu veux gérer des flux de données au sein d'une classe, ce serait plutôt, selon le cas, un flux fichier (*fstream) ou un flux de conversion de chaine (*stringtream) qu'il faudrait utiliser, non
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    screetch
    Invité(e)
    Par défaut
    tu ne confonds pas avec cin et cout ?

    istream et ostream sont des typedefs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef basic_istream<char, char_traits<char> > istream;
    typedef basic_ostream<char, char_traits<char> > ostream;
    le but serait ici de les utiliser dans un premier temps sans les brancher sur rien.

    Cela n'a pas de sens, on souhaite qu'apres la construction on puisse appeler << ou >>.

    Il est peut etre preferable de passer par in istream* initialisé a 0 puis de creer l'objet.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2015, 15h26
  2. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  3. Streaming video sous Linux
    Par freeshman dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 03/01/2004, 17h17
  4. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo