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

SL & STL C++ Discussion :

Problème avec Ofstream


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Par défaut Problème avec Ofstream
    Bonjour,

    J'essaie dans mon programme de créer un fichier où je vais écrire le résultat qui est une matrice. Pour cela j'ai écrit un header Streambuffer:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #ifndef __STREAMBUFFER__
    #define __STREAMBUFFER__
     
     
    #include <iostream>
    #include <ostream>
     
    class IStreamBuffer : public ofstream
    {
    private:
    	ofstream*  m_streamfile ;
    public:
                // ****************************
                IStreamBuffer(const char* _filename)
                {
                      m_streamfile = new ofstream(_filename, ios::out);
                }
                void WriteStrToBuffer(char* _str)
                {
                      *m_streamfile << _str << endl;           
                }
     
                void WriteDblToBuffer(double _amount)
                {
                      *m_streamfile << _amount << endl;
                }
                void WriteFloatToBuffer(float _value)
                {
                      *m_streamfile << _value << endl;
                }
                void Close()
                {
                      m_streamfile->close();
                }         
     
    };
    #endif
    mais j'ai une erreur que j'arrive pas à résoudre: "error C2504: 'ofstream'*: classe de base non définie"
    Avez vous une idée sur que ça peut être(Je suis sur Visual express 2005)

    Merci

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Par défaut
    Je l'ai ajouté mais ça ne change rien. Il reconnait pas ofstream

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    std::ofstream... et pourquoi l'alloué sur le tas?

  5. #5
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Citation Envoyé par Goten Voir le message
    std::ofstream... et pourquoi l'alloué sur le tas?
    Justement, il ne l'alloue pas sur le tas, il l'alloue sur le heap

    D'ailleurs oui, pourquoi ?

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Heu... Au fait, ce n'est pas à la base une très mauvaise idée de dériver une classe de la STL ??
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    Justement, il ne l'alloue pas sur le tas, il l'alloue sur le heap

    D'ailleurs oui, pourquoi ?
    wtf? heap == tas...

    @Mac_lak : je sais pas si c'était rhétorique, mais dans tout les cas oui c'est pas une bonne idée, c'est pas prévu pour.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Goten Voir le message
    @Mac_lak : je sais pas si c'était rhétorique, mais dans tout les cas oui c'est pas une bonne idée, c'est pas prévu pour.
    Ben regardes la déclaration de la classe...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class IStreamBuffer : public ofstream
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Non non je sais qu'il la fait. Rhétorique dans le sens où pour toi c'était évident que oui c'est mal. Pas évident qu'il l'ai fait :p.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Non, c'était bien pour me confirmer que même sur les flux, c'était pas spécialement une bonne idée... Et comme c'est le cas (il tente de dériver de ofstream), je me dis qu'il y a peut-être la cause à cet endroit :
    • Dériver d'une classe STL,
    • Ne pas préfixer par "std::" les références à ofstream.
    Les deux combinés, ça ne doit pas aider...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ne pas préfixer ostream se suffit à lui même pour sortir ce message d'erreur. C'est plus vicieux les soucis quand on dérive d'une classe de la STL (flux compris).

  12. #12
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Citation Envoyé par Goten Voir le message
    wtf? heap == tas...
    Euh...

    Attends, 2sec.

    Stack. Stack... Pile !
    Heap ne peut être que tas, en effet

    Mes excuses, problèmes de traduction inside

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Heu... Au fait, ce n'est pas à la base une très mauvaise idée de dériver une classe de la STL ??
    De la STL, oui, par contre de la SL, ça dépend. En particulier, il y a des classes de la SL qui sont prévues pour être dérivées : Les *streambuf me viennent en tête, et les *stream aussi (même si souvent pour elles l'intérêt est juste d'utiliser un autre *streambuf au niveau de leur constructeur).

    En fait, comme toujours, si la classe a des fonctions virtuelles, un destructeur virtuel, il doit y avoir une bonne raison, sinon, il vaut généralement mieux s'abstenir de dériver (sauf encore une fois de quelques classes de trait).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    De la STL, oui, par contre de la SL, ça dépend. En particulier, il y a des classes de la SL qui sont prévues pour être dérivées : Les *streambuf me viennent en tête, et les *stream aussi (même si souvent pour elles l'intérêt est juste d'utiliser un autre *streambuf au niveau de leur constructeur).

    En fait, comme toujours, si la classe a des fonctions virtuelles, un destructeur virtuel, il doit y avoir une bonne raison, sinon, il vaut généralement mieux s'abstenir de dériver (sauf encore une fois de quelques classes de trait).
    par *stream t'entends bien : istream / ostream? (pas fstream quoi)

  15. #15
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne vois pas trop quel problème il pourrait y avoir à dériver d'un fstream, même si jusqu'à présent, j'ai toujours dérivé mes flux de istream et ostream.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  16. #16
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    J'ai peut être mal vu (j'ai regardé vite fait) mais ofstream/ifstream n'ont pas de dtor virtuel si?

  17. #17
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Vu qu'ils dérivent de [i/o]stream qui ont un destructeur virtuel...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  18. #18
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    oh gash, dikumware m'a eu :p. Donc je retire mes précédentes affirmations, mea culpa

  19. #19
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    De la STL, oui, par contre de la SL, ça dépend. En particulier, il y a des classes de la SL qui sont prévues pour être dérivées : Les *streambuf me viennent en tête, et les *stream aussi (même si souvent pour elles l'intérêt est juste d'utiliser un autre *streambuf au niveau de leur constructeur).
    Plus exception et la plupart de ses descendants, unary_function, binary_function, iterator, locale::facet et je dois en oublier.

Discussions similaires

  1. Problème avec ofstream et >>
    Par Pouknouki dans le forum Débuter
    Réponses: 11
    Dernier message: 07/08/2013, 14h46
  2. problème avec ofstream
    Par rodgeurette dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/07/2007, 14h02
  3. Problème avec ofstream et ios::app
    Par Clad3 dans le forum SL & STL
    Réponses: 8
    Dernier message: 07/01/2007, 12h10
  4. problème avec ofstream::write
    Par b4u dans le forum SL & STL
    Réponses: 3
    Dernier message: 01/06/2006, 14h17
  5. [C++] Problème avec ofstream
    Par Mathieu.J dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/03/2006, 12h51

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