passenden Code C++ hier posten?



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • string filename = "/home/ygdrasil/Arbeitsfläche/Datei/2013/"+Monat2+"/"+Monat1+"/"+"KL.dat";
    ofstream dataus(filename.c_str(), ios_base::app);
    dataus << "Neue variabell für 2014: Euro:" << blubblub << endl;
    dataus.close();
    

    Funktioniert hat das nicht.



  • ja natürlich. der std::string ist nicht dazu da, verschiedene datentypen in text zu wandeln. dafür nutzt man std::ostringstream. ist man da fertig mit schreiben, kann man sich den generierten text bequem mit .str() holen gehen. weil du einen c-string brauchst für den fstream würde es aber .str().c_str() lauten.

    offtopic:
    - es heisst "variable".
    - der explizite close-aufruf ist höchstwahrscheinlich unnötig. (kann auch sein dass ich mit irre, je nach dem was nach dem listing für code kommt)



  • Ja, weil du in C++ nicht (wie in Java) Strings und andere Datentypen per '+' zusammenketten kannst.

    std::string mystring = "...";
    std::ofstream dataus(mystring.c_str()); // das geht alles
    
    int i = 0;
    double d = 3.14;
    std::string mystring = "abc" + i + "def" + d; // geht nicht
    
    // --->
    std::string mystring = "abc" + std::to_string(i) + "def" + std::to_string(d); // geht mit C++11
    

    Achtung!

    std::string mystring = "abc" + "def" + "ghi"; // geht nicht!
    

    edit: essentielle syntaktische Fehler beseitigt -.-



  • std::string mystring = "...";
    std::ofstreamdataus(mystringc_str());
    

    Leider muss ich dem letzt genannten Posting wiedersprechen, zur Unterstützung hier der Compileroutput>>

    Fehler: »ofstreamdataus« ist kein Element von »std«|

    Wie mache ich »ofstreamdataus« zum Element von »std« ?



  • Mister C++ schrieb:

    std::string mystring = "...";
    std::ofstreamdataus(mystringc_str());
    

    Leider muss ich dem letzt genannten Posting wiedersprechen, zur Unterstützung hier der Compileroutput>>

    Fehler: »ofstreamdataus« ist kein Element von »std«|

    Wie mache ich »ofstreamdataus« zum Element von »std« ?

    du liest also meine posts nicht? gut, dann brauche ich ja künftig nicht mehr zu antworten.



  • Mister C++ schrieb:

    std::string mystring = "...";
    std::ofstreamdataus(mystringc_str());
    

    Leider muss ich dem letzt genannten Posting wiedersprechen, zur Unterstützung hier der Compileroutput>>

    Fehler: »ofstreamdataus« ist kein Element von »std«|

    Wie mache ich »ofstreamdataus« zum Element von »std« ?

    Hatte mich vertippt und das Leerzeichen zwischen std::OFSTREAM und DATAUS vergessen.



  • Leider komme ich so nicht weiter.
    Ich programmiere weiterhin mit g++ in Ubuntu s.o (Code::Blocks ist die Ide).
    Leider kann ich jetzt den passenden Codefragment nicht posten.
    Dafür den Compileroutput, un der hat relativ viele Fehler.

    Fehler: invalid pure specifier (only »= 0« is allowed) before »;« token|
    Fehler: Funktion »std::string mystringc_str()« ist wie eine Variable initialisiert|
    Fehler: keine passende Funktion für Aufruf von »std::basic_ofstream<char>::basic_ofstream(std::string)«|
    Anmerkung: Kandidaten sind:|
    Anmerkung: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::ios_base::openmode) [mit _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]|
    Anmerkung:   keine bekannte Umwandlung für Argument 1 von »std::string {aka std::basic_string<char>}« nach »const char*«|
    Anmerkung: std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [mit _CharT = char, _Traits = std::char_traits<char>]|
    Anmerkung:   Kandidat erwartet 0 Argumente, 1 angegeben|
    Anmerkung: std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)|
    Anmerkung:   keine bekannte Umwandlung für Argument 1 von »std::string {aka std::basic_string<char>}« nach »const std::basic_ofstream<char>&«|
    ||=== Erstellen beendet: 10 Fehler, 0 Warnungen===|
    


  • Ja, Skymosho hat auch noch den Punkt vergessen.
    Folgende Anleitung:
    Zusammensetzten des Pfades mit ostringstream.
    Den std::string dann via c_str konvertieren.
    Wenn du hier jetzt etwas nicht verstehst, google.
    Das ist viel besser als einfach ohne Sinn und Verstand Codezeilen hier aus dem Forum reinzukopieren.



  • -.- Stimmt hast Recht, doofe Tastatur. 😞

    Andererseits CodeBlocks hat eine AutoCompletion, die kann in solchen Fällen auch helfen!



  • Nathan

    Den std::string dann via c_str konvertieren.

    Das habe ich nicht verstanden.
    Erklär das mal genauer.



  • Mister C++ schrieb:

    Nathan

    Den std::string dann via c_str konvertieren.

    Das habe ich nicht verstanden.
    Erklär das mal genauer.

    std::string hat eine Memberfunktion c_str(), die einen const char* zurückliefert.
    Beispiele findest du hier massig im Thread.



  • Dieses

    Memberfunktion c_str()

    suchte ich in http://www.c-plusplus.net/forum/search
    als Antwort bekamm ich

    Keine Beiträge entsprechen Ihren Kriterien.



  • asfasdf schrieb:

    ja natürlich. der std::string ist nicht dazu da, verschiedene datentypen in text zu wandeln. dafür nutzt man std::ostringstream. ist man da fertig mit schreiben, kann man sich den generierten text bequem mit .str() holen gehen. weil du einen c-string brauchst für den fstream würde es aber .str().c_str() lauten.

    offtopic:
    - es heisst "variable".
    - der explizite close-aufruf ist höchstwahrscheinlich unnötig. (kann auch sein dass ich mit irre, je nach dem was nach dem listing für code kommt)

    Warum so verkrampft umständlich?



  • Mister C++ schrieb:

    Dieses

    Memberfunktion c_str()

    suchte ich in http://www.c-plusplus.net/forum/search
    als Antwort bekamm ich

    Keine Beiträge entsprechen Ihren Kriterien.

    Lies dir einfach nochmal alle Beiträge in diesem Thread durch...



  • schuettelmitkopf schrieb:

    asfasdf schrieb:

    ja natürlich. der std::string ist nicht dazu da, verschiedene datentypen in text zu wandeln. dafür nutzt man std::ostringstream. ist man da fertig mit schreiben, kann man sich den generierten text bequem mit .str() holen gehen. weil du einen c-string brauchst für den fstream würde es aber .str().c_str() lauten.

    offtopic:
    - es heisst "variable".
    - der explizite close-aufruf ist höchstwahrscheinlich unnötig. (kann auch sein dass ich mit irre, je nach dem was nach dem listing für code kommt)

    Warum so verkrampft umständlich?

    wie sonst? dir ist schon klar, dass es keinen effekt auf sprintf hat, den operator<< für eigene klassen zu überladen? und du weisst auch dass sprintf variadic parameters hat, die nicht typsicher sind?


Anmelden zum Antworten