konvertierung(ifstream, ofstream)



  • Hallo,
    tut mir leid das ich euch zu so später stund schon wieder mit meinen Problemen nerve. Folgendes, ich schreibe gerade einen Vokabeltrainer und der funktioniert in der normalen Vers. auch schon ganz gut. Nun ja, ich wollte das ganze nun einmal nochmal von Grund auf neu schreiben und vereinfachen und scheitere an einer Fehlermeldung, ich habe alles probiert kann sie aber nicht beheben.

    Die Klasse: Streaming
    Streaming.h:

    //Die Klasse:
    #ifndef _STREAMING_
    #define _STREAMING_
    
    #include <string>
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    class Streaming
    {
    private:
    	ifstream in;
    	ofstream out;
    	string content;
    public:
    	Streaming(ifstream In,ofstream Out);
    	~Streaming(){};
    
    	int m_seekEndOfFile(void);
    	string m_readLine(int NumberOfLine);
    	bool m_writeLine(string Inhalt);
    
    };
    
    #endif //_STREAMING_
    

    Die implementierung der Klasse:
    //Ich zeige euch nur den Konstruktor, alles andere sollte nicht relevant sein:
    Streaming.cpp:

    //Konstruktor
    Streaming::Streaming(ifstream In,ofstream Out)
    
    {
    	this->in=In;
    	this->out=Out;
    }
    

    Und der Aufruf in der main:

    //Der Aufruf:
    Streaming Deutsch("VokabelnGerman.txt","VocabularyGerman.txt");
    

    Ich bekomme einen Fehler das er die Parameter nicht in den datentyp von ifstream oder ofstream nicht konvertieren kann, ist mir auch klar, aber wie kann ich das anstellen?

    vielen dank im voraus.

    MfG max



  • Streaming::Streaming(const char * In,const char *  Out) 
    
    { 
    
        this->in.open( In, ios::in, filebuf::openprot ); //öffnen zum lesen mit Standardoptionen
        this->out.open( Out, ios::out, filebuf::openprot );  //öffnen zum schreiben mit Standardoptionen
    
    /*
        this->in=In; 
        this->out=Out; 
    */
    }
    

    Oder wenn Du es unbedingt ausserhalb geöffnet haben willst verlagere die opens nach draussen und übergebe Zeiger drauf.

    http://msdn.microsoft.com

    Auch wenn ich nur MS nutzer bin und kein MS Fan, aber das ist echt ne gute Sache! Klassen/Typ Namen eingeben und sich einfach durch das logischte durchklicken, dann erfährt man alles wissenswerte über die Member einer Klasse und teilweise wie sie anzuwenden sind.



  • _STREAMING_ ist für die Implementierung reserviert, wie jeder Bezeichner, der mit _ + Großbuchstabe anfängt.

    Davon abgesehen ist das Problem hier, dass man ifstreams und ofstreams nicht kopieren kann. Du kannst sie also nicht einfach by-value als Parameter übergeben und dann als Elementvariablen speichern. Am einfachsten umgehst du das, indem du im Konstruktor von Streaming die beiden Dateinamen annimmst und an die Streamkonstruktoren weiterleitest.



  • btw: generell ist es keine gute Idee streams als Member zu haben. Das bringt meistens mehr Nachteile als Vorteile.



  • Shade Of Mine schrieb:

    btw: generell ist es keine gute Idee streams als Member zu haben. Das bringt meistens mehr Nachteile als Vorteile.

    Wie wuerdest du sowas machen? Habe auch schon Klassen geschrieben, in denen ich
    solche Member habe.

    Wie koennte ich sowas eleganter loesen?

    mfg
    v R



  • virtuell Realisticer schrieb:

    Wie wuerdest du sowas machen? Habe auch schon Klassen geschrieben, in denen ich
    solche Member habe.

    Natürlich muss es nicht schlecht sein, aber oft bringt es mehr Nachteile mit sich.

    zB kann eine Klasse die einen stream als Member hat nicht kopiert werden...

    eine alternative die gerne genommen wird ist nur den Dateinamen als Member haben und die Datei immer wieder öffnen.

    Ich ahbe aber bisher nur folgende Methode verwendet (habe es aber auch noch nicht oft gebraucht): die ganze Datei wird in den Speicher gemappt und dort bearbeitet - am ende wird der ganze Inhalt in die Datei geschrieben.



  • In der Tat, so koennte man das auch machen. Und im Speicher arbeiten is ja eh
    schneller als Platte.

    So hab ich das bis jetzt noch nicht gemacht (naja, wohl auch eher, weil ich nicht
    so oft mit Dateien arbeite).

    Thx und unglaublich, dass zu der Zeit noch wer auf ist 😉

    mfg
    v R



  • Hi,
    danke für die schnelle antworten.
    Ich kam einfach nicht darauf, ich hoffe ich werde irgendwann
    noch einigermaßen intelligent. 🙄

    [EDIT]Im Destruktor schließe ich die Dateien dann wieder.[/EDIT]

    cu max


Anmelden zum Antworten