String mit integer verbinden



  • Hallo!

    Ich bin gerade dabei c++ zu lernen (hab vorher etwas Java programmiert) und habe folgendes Programm geschrieben:

    for(int i=0;i<100;i++)
        {
                ofstream Datei;
                string dn=(string)("C:/workspace/dat"+i+".txt");
                Datei.open(dn, ios::trunc);
                Datei<<a<<endl;
                Datei.close();
        }
    

    Dabei erhalte ich in Zeile 4 eine Fehlermeldung:
    invalid operands of types `const char*' and `const char[5]' to binary `operator+'

    Die Dateien sollen durchnummeriert werden!
    Wieso funktioniert das nicht? (so kenn ich es von Java)
    Wie soll ich es dann machen?

    Außerdem funktioniert auch Zeile 5 nicht. Fehlermeldung:
    no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::open(std::string&, const std::_Ios_Openmode&)'

    Ich bin im Moment völlig ratlos. 😞
    ➡ Helft mir bitte!!!



  • Hi,

    1. ostringstream (Auch zu finden unter FAQ "string nach int und zurück" (o.ä.))
    2. open braucht keinen std::string, sondern einen "char const*", dafür gibt's c_str()
    3. Java-casts funktionieren nicht in C++ 😉 (also "(string)")
    4. Beim "Abräumen" eines stream-Objektes wird automatisch ge-close-ed; hier kannst Du es Dir also sparen

    for(int i=0;i<100;i++)
        {
                ofstream Datei;
                ostringstream ost;
                ost << "C:/workspace/dat" << i << ".txt";
                Datei.open(ost.str().c_str(), ios::trunc);
                Datei<<a<<endl;
        }
    

    Gruß,

    Simon2.



  • Danke für die schnelle Antwort 😃 !



  • Michael1234 schrieb:

    Außerdem funktioniert auch Zeile 5 nicht. Fehlermeldung:
    no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::open(std::string&, const std::_Ios_Openmode&)'

    ifstream::open() gibt es (leider) nicht für std::string's, sondern nur für char* - das heißt, du mußt dir mit c_str() die char*-Daten des Strings holen (auch in Simon's Version, die er schon korrigiert hat ;)).



  • Jetzt habe ich schon wieder eine Fehlermeldung:
    aggregate `std::ostringstream ost' has incomplete type and cannot be defined

    Was ist jetzt falsch? (ich habe obiges Beispiel abgeschrieben)

    Danke, für eure schnelle hilfe!



  • Hast du den richtigen Header (in dem Fall <sstream>) eingebunden?



  • Jetzt funktioniert's! 😃



  • CStoll schrieb:

    Hast du den richtigen Header (in dem Fall <sstream>) eingebunden?

    Ah - sorry Michael, hatte ich vergessen !

    Schön, dass es jetzt klappt !

    Gruß,

    Simon2.


Anmelden zum Antworten