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
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 2
    Points
    2
    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 : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846

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

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

  4. #4
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    Par défaut
    std::ofstream... et pourquoi l'alloué sur le tas?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    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 : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    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 ??

  7. #7
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    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 : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    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

  9. #9
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    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 : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    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...

  11. #11
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    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 confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    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
    Points : 16 213
    Points
    16 213
    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).

  14. #14
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    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
    Points : 16 213
    Points
    16 213
    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.

  16. #16
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Vu qu'ils dérivent de [i/o]stream qui ont un destructeur virtuel...

  18. #18
    Membre chevronné
    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
    Points : 2 205
    Points
    2 205
    Par défaut
    oh gash, dikumware m'a eu :p. Donc je retire mes précédentes affirmations, mea culpa

  19. #19
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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