fstream hat Angst sich zu zeigen^^



  • Aloa,
    hab Problem mit fstream, hab so das Gefühl das sich fstream nicht
    traut sich nackig zu machen. Und zwar hab ich da ne einfache Methode
    in einer Klasse deklariert, die ich ausführen möchte und in ihr
    einige fstream-Operationen durchführen. Das heisst, dass hier ist
    bei mir nicht möglich:

    class Hauptklasse
    {
    public:
    
    bool Methode(char *xyzFilename);
    };
    
    bool Hauptklasse::Methode(char *xyzFilename)+
    {
    fstream Objekt;
    Objekt.fopen(Filename,"rt")
    .....
    }
    

    Funzt bei mir nicht, wie gehe ich am besten vor? Fstream als
    Instanz in der Methode angeben, sodass ich das Objekt direkt
    mit dem Aufruf von der Methode miteinbinden. Das heisst in
    der Methodendeklarierung:

    bool Methode(char *xyzFilename, fstream ModelFile);
    

    Bitte ein Tipp, danke.



  • Fehlermeldung?



  • Gebangt schrieb:

    bool Hauptklasse::Methode(char *xyzFilename)+
    {
    fstream Objekt;
    Objekt.fopen(Filename,"rt")
    .....
    }
    

    Was soll das Plus da?

    Gebangt schrieb:

    Funzt bei mir nicht, wie gehe ich am besten vor?

    Am besten schreibst du, was nicht funktioniert...



  • Hallo,

    Gebangt schrieb:

    Aloa,
    hab Problem mit fstream, hab so das Gefühl das sich fstream nicht
    traut sich nackig zu machen. Und zwar hab ich da ne einfache Methode
    in einer Klasse deklariert, die ich ausführen möchte und in ihr
    einige fstream-Operationen durchführen. Das heisst, dass hier ist
    bei mir nicht möglich:

    class Hauptklasse
    {
    public:
    
    bool Methode(char *xyzFilename);
    };
    
    bool Hauptklasse::Methode(char *xyzFilename)+
    {
    fstream Objekt;
    Objekt.fopen(Filename,"rt")
    .....
    }
    

    Funzt bei mir nicht, wie gehe ich am besten vor? Fstream als
    Instanz in der Methode angeben, sodass ich das Objekt direkt
    mit dem Aufruf von der Methode miteinbinden. Das heisst in
    der Methodendeklarierung:

    bool Methode(char *xyzFilename, fstream ModelFile);
    

    Bitte ein Tipp, danke.

    Ein fstream hat keine Methode fopen, und auch der Öffnungsmodus wird völlig anders angegeben, siehe:

    http://cppreference.com/cppio/open.html

    MfG,

    Probe-Nutzer



  • bool Methode(char *xyzFilename, fstream ModelFile);
    

    mal davon abgesehen, dass methode nen echt geiler fkt-name ist, weil der so unendlich viel aussagt xD

    bool Methode (const std::string &path, std::fstream &stream);
    

    bb



  • Das Plus sollte da nicht sien, Tippfehler. Nunja, ist nix mit Fehlermeldung mir geht's drum wie ich es in der Theorie löse. Wie kann ich fstream dann am besten in der bool Methode aufrufen? Das Problem ist, dass er in egal welcher Funktion, Klasse oder Methode er fstream nicht kennt bzw. sagt er mir:

    error C2065: 'fstream' : undeclared identifier
    

    , obwohl ich die fstream-Library includiert hab.



  • Die Klasse fstream ist auch im Namensraum std .

    Entweder du schreibst jeweils std:: davor, oder du gibst am Anfang den Namensraum mittels using namespace std; bekannt.



  • Nunja, dass Problem ist nun, wie ich gerade feststellte, dass ich keine
    anderen Parameter an die Methode übergeben darf, weil diese automatisch
    erkannt wird. Denn eigentlich ist diese Methode dazu da, um ein Model
    zu laden, und deswegen kennt LoadModel nur Filename =(.



  • Gebangt schrieb:

    Nunja, dass Problem ist nun, wie ich gerade feststellte, dass ich keine
    anderen Parameter an die Methode übergeben darf, weil diese automatisch
    erkannt wird.

    Es wäre wirklich sehr hilfreich, wenn du dich ein bisschen klarer ausdrücken könntest. Ich hab nämlich keine Ahnung, was du damit meinst.

    Wenn kein Objekt übergeben werden darf (aus welchem Grund auch immer), kannst du es ja in der Klasse speichern.



  • #include <fstream> // header einbinden
    //... andere includes und evtl andere definitionen der Klasse
    void Klasse::Lade(char const * dateiname)
    {
        std::ifstream eingabe(dateiname /*, std::ios_base::binary */); //auskommentieren wenn binär daten gelesen werden sollen 
        // arbeite mit eingabe.
    };
    


  • Erstmal Danke an alle. Es handelt sich um ein MD2-Modelloader.
    @Evilissimo
    Das Problem ist, hier kennt er (i)fstream schon garnicht mehr, aber
    naja, hier mal Code:

    bool LoadModel(const char* szFilename); //Methodendeklarierung
    

    Hier der Aufruf:

    bool CMD2Model::LoadModel(const char* szFilename)
    {
    
    	std::ifstream ModelFile;
    
    	if(ModelFile.fopen( szFilename,"rt")
    	{
    		return false;
    	}
    /...blablabla...Datei wird durchforstet...
    }
    


  • Wo liegt das Problem? Wenn fstream dort nicht bekannt ist, mach es eben bekannt...

    Und ausserdem wurde dir schon gesagt, dass fstream keine Methode namens fopen() hat. Es ist ehrlich gesagt ziemlich mühsam, dir zu helfen, wenn du erstens nicht tust, was in den Antworten empfohlen wird und zweitens dich nie klar ausdrückst und dich strikt weigerst, den Fehler zu erwähnen... 🙄



  • ...

    edit: ach mist - nexus war ma wieder schneller ^^



  • unskilled schrieb:

    edit: ach mist - nexus war ma wieder schneller ^^

    Sogar so schnell, dass er noch gesehen hat, dass das Gleiche bereits vor dem Edit dastand :p



  • Nexus schrieb:

    unskilled schrieb:

    edit: ach mist - nexus war ma wieder schneller ^^

    Sogar so schnell, dass er noch gesehen hat, dass das Gleiche bereits vor dem Edit dastand :p

    joar, habs scho beim vorschau klicken gesehen ^^ und da ich schnell nur mit einem l geschrieben hab, hab ichs dann halt so gemacht : D
    hier kann man aber au gar nix verheimlichen ><

    bb ^^



  • Kleiner denkfehler, hab da was mit fstream vertauscht, hab's jetzt
    mit der stdio.h-Library *goldzahn*.
    Lösung:

    FILE* ModelFile;
    
    	if(ModelFile=fopen(szFilename,"rb"))
    	{
    		return false;
    	}
    

    Und da fstream keine fopen's kennt, ging ja auch wohl schlecht
    ModelFile.fopen^^. Naja, jetzt haben wir's ja, vielen Dank Leute.



  • Gebangt schrieb:

    Naja, jetzt haben wir's ja, vielen Dank Leute.

    Ja, aber auch nur, wenn du C programmierst. fopen() sowie auch der Header <stdio.h> sind nicht C++, fstream und der gleichnamige Header hingegen schon. fstream hat auch eine Methode zum Öffnen, nur heisst die open() . Zu dieser würde ich dir auch raten, wenn du C++ benutzt.

    Und wenn du die C-Bibliotheken in C++ nutzen willst, heisst der Header <cstdio>.


Anmelden zum Antworten