Problem beim Speichern einer Textdatei



  • Hallöchen 🙂
    Bin dabei C++ zu lernen, habe früher viel in VB geschrieben und wollte nun auf eine ordentliche Programmiersprache umsteigen. Da ich auch schon in JS gecoded habe, ist mir der Syntax von C++ nicht vollkommen fremd. Ich habe aber trotzdem einige Umstellungsschwierigkeiten.

    In dem Buch, was ich gerade lese, bin ich nun bei Dateien angekommen. Das Beispiel im Buch wollte ich jetzt in eine Funktion packen, geht aber nicht so ganz wie ich möchte.

    Der Fehler liegt bei "DatAusgabe.open(Dateiname);". Dateiname ist ja ein String in dem der Pfad steht, aber ich bekomme immer einen Kompilererror, wenn ich es so kompilieren möchte.
    Ich verstehe das nicht, wenn ich den Pfad direkt statt Dateiname angebe wird die Datei erzeugt.
    Was mache ich da falsch? 😕

    Vielen Dank,
    Tsunami

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    bool Speichern(string);
    
    // Start
    int main(void){
       Speichern("c:\\testlauf.txt");
       return 0;
    }
    
    bool Speichern(string Dateiname){
    
    	ofstream DatAusgabe;
    	DatAusgabe.open(Dateiname);
    	DatAusgabe << "In eine Textdatei schreiben." << endl
              << "Noch ein Satz.";
    	DatAusgabe.close();
    
        return true;
     }
    

    Fehlermeldung vom Kompiler:

    Compiling source file(s)...
    Main.cpp
    Main.cpp: In function `bool Speichern(std::string)':
    Main.cpp:16: error: no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::open(std::string&)'
    C:\MinGWStudio\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\fstream:695: note: candidates are: void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
    Main.cpp:22:3: warning: no newline at end of file
    
    Testen.exe - 2 error(s), 1 warning(s)
    


  • open() erwartet ein char* doch du gibst ihm ein std::string.
    Um das char* von std::string zu bekommen machste einfach:

    Datei.open(name.c_str());
    


  • Hallo Freak_Coder,

    Vielen Dank für die schnelle und treffliche Hilfe. Jetzt geht's, habe String auch mal durch char* ersetzt und läuft damit auch 🙂
    Au man, das wird noch dauern bis ich mich da richtig eingearbeitet habe.

    Grüße,
    Tsunami



  • schön wäre, wenn sich jmd. einem Anfänger wir mir erbarmen könnte und ein funktionisfähiges, bzw. obiges Beispiel in korrigierter Form posten würde.

    danke.



  • Tsunami schrieb:

    Hallöchen 🙂

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    bool Speichern(string);
    
    // Start
    int main(void){
       Speichern("c:\\testlauf.txt");
       return 0;
    }
    
    bool Speichern(string Dateiname){
    
    	ofstream DatAusgabe;
            ///////////////////////////
    	DatAusgabe.open(Dateiname.c_str());
            ///////////////////////////
    	DatAusgabe << "In eine Textdatei schreiben." << endl
              << "Noch ein Satz.";
    	DatAusgabe.close();
    	
        return true;
     }
    

    Das hätte man aber durch genaues lesen auch selbst zusammenbasteln können. 😉



  • Jann Hendrik schrieb:

    schön wäre, wenn sich jmd. einem Anfänger wir mir erbarmen könnte und ein funktionisfähiges, bzw. obiges Beispiel in korrigierter Form posten würde.

    danke.

    und wenn du dich erbarmen würdest, die postings richtig zu lesen, hättest du erkannt, das Freak_Coder die einzige veränderung, die zum funktionieren des codes notwendig ist, gepostet hat!



  • Wo ist denn bitte das Problem in dem nicht funktionierenden Beispiel die fehlerhafte Zeile durch Freak_Coder's Korrektur zu ersetzen?!

    EDIT: zu langsam



  • @DarthZiu: danke dir!

    @die beiden danach:
    Ich kann euch ja verstehe - so ist es nicht, aber obige Zeile lediglich zu ersetzen reicht nicht - es hagelt Fehlermeldungen.

    Den Variablenname einfach nur anzupassen reicht auch nicht... auch nur Fehlermeldungen....

    Andernfalls hätte ich nicht gefragt - ist ja nicht so, dass ich das nicht schon selbst ausprobiert hätte!



  • Jann Hendrik schrieb:

    @DarthZiu: danke dir!

    @die beiden danach:
    Ich kann euch ja verstehe - so ist es nicht, aber obige Zeile lediglich zu ersetzen reicht nicht - es hagelt Fehlermeldungen.

    Den Variablenname einfach nur anzupassen reicht auch nicht... auch nur Fehlermeldungen....

    Bei mir geht's dann.



  • Jann Hendrik schrieb:

    @DarthZiu: danke dir!

    @die beiden danach:
    [...] es hagelt Fehlermeldungen.

    Äh, DarthZiu's Programm ist das Ursprungsprogramm mit nur genau dieser einen Zeile ersetzt.



  • Jann Hendrik schrieb:

    @die beiden danach:
    Ich kann euch ja verstehe - so ist es nicht, aber obige Zeile lediglich zu ersetzen reicht nicht - es hagelt Fehlermeldungen.

    Den Variablenname einfach nur anzupassen reicht auch nicht... auch nur Fehlermeldungen....

    Andernfalls hätte ich nicht gefragt - ist ja nicht so, dass ich das nicht schon selbst ausprobiert hätte!

    dann poste doch deinen code, und dann schauen wir was falsch ist!
    der code, mit der veränderung von freak, geht! (auch wenn ein paar verbesserungen vorgenommen werden könnten ;))



  • ser1al schrieb:

    dann poste doch deinen code, und dann schauen wir was falsch ist!
    der code, mit der veränderung von freak, geht! (auch wenn ein paar verbesserungen vorgenommen werden könnten ;))

    schlagt mich bitte nicht 🙂
    Keine Ahnung warum - was da nicht funktioniert hat.

    Das konnte ich ja so nicht auf mir sitzen lassen... also habe ich das getestet: funktioniert!

    wie gesagt - keine Ahnung, warum das vorher nicht ging!

    Bitte um Entschuldigung!



  • Es sei dir verziehen. Du darfst dich nun wieder erheben. 😉



  • danke.

    derweil knobel ich auch schon an meinem nächsten Problem..
    aber.. ich versuch noch ein wenig, bevor ich wieder in die Nesseln setze!


Log in to reply