String in Float umwandeln?



  • Hallo,
    ich bin gerade dabei, einen String in einen Float umzuwandeln. Kann mir wer diese Zeile Code erklären:

    float stof(const std::string & str, std::size_t * pos = 0);
    

    Außerdem funktioniert das nicht 😕
    Hier mein Code:

    #include <iostream>
    int main() {
    	std::string f = "3.99";
    	float stof(const std::string & str, std::size_t * pos = 0);
    	float s;
    	f = stof(s);
    }
    

    Das funktioniert leider nicht. Es kommen diese Fehlermeldungen. Wie kann ich das richtig machen?
    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler (aktiv) E0415 Für eine Konvertierung von ""float"" in""std::basic_string<char, std::char_traits<char>, std::allocator<char>>"" ist kein passender Konstruktor vorhanden. stringtofloat C:\Users\redex\source\repos\stringtofloat\stringtofloat\Quelle.cpp 7

    &&

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler C2664 "float stof(const std::string &,size_t *)" : Konvertierung von Argument 1 von "int" in "const std::string &" nicht möglich stringtofloat C:\Users\redex\source\repos\stringtofloat\stringtofloat\Quelle.cpp 6

    LG



  • @redexception Die Funktion stof erwartet 2 Parameter und gibt ein Wert vom Typ float zurück.
    D.h. dass die Variable, die du disen Wert zuweisen möchtest, auch von diesem Typ sein sollte.

    Der erste Parameter ist vom Typ std::string, der zweite ist ein Zeiger auf std::size_t

    PS: https://www.cplusplus.com/reference/string/stof/?kw=stof



  • @redexception du solltest das Buch zwar verbrennen, aber jetzt musst du dir natürlich etwas anständiges kaufen.

    Funktionen sind Grundlagenwissen.



  • @redexception sagte in String in Float umwandeln?:

    Kann mir wer diese Zeile Code erklären:

    float stof(const std::string & str, std::size_t * pos = 0);
    

    Hierbei handelt es sich um eine Funktionsdeklaration. Da sie sich innerhalb von main() befindet ist sie zudem eine lokale Funktionsdeklaration. Der C++-Standard kennt keine lokalen Funktionen, daher macht diese Deklaration - obwohl lustigerweise erlaubt - IMO keinen Sinn.

    Warum diese Zeile in deinem Code steht, musst du selbst beantworten. Ich gehe mal davon aus, das du die dort hingeschrieben hast und hoffentlich einen Grund dafür hattest - auch wenn er wohl auf einem Missverständnis beruhte. Nimm die Zeile raus und stell sicher, dass du ein #include <string> machst. Dieser Header stellt nämlich std::stof zur Verfügung - die Funktion, die du hier wahrscheinlich afrufen willst.

    Außerdem funktioniert das nicht 😕

    Du hättest diesen Fehler wahrscheinlich intuitiv vermieden, wenn du deinen float f, und deinen string s genannt hättest anstatt umgekehrt. Nimm zuerst diese stof-Deklaration aus dem Code heraus und schau dir dann nochmal ganz genau an, was du hier in was konvertieren willst und wie der Code dafür tatsächlich lauten müsste.



  • @Finnegan Ah okay, danke.
    Ich habe so ein drecks Buch, in welchem steht, dass man dies hinschreiben müsste. Also ist diese Funktion in der <string> Bibilothek enthalten?



  • @manni66 Habe nochmals in das Buch geschaut 😞
    Ist denn diese Funktion in der <string> Bibilothek enthalten?
    Oder soll ich das mit std::stringstream machen?



  • @redexception sagte in String in Float umwandeln?:

    Ist denn diese Funktion in der <string> Bibilothek enthalten?

    <string> ist ein Header und die Funktion ist dort seit C++ 11 enthalten, wie du der von @DirkB verlinkten Dokumentation entnehmen kannst.



  • @manni66 sagte in String in Float umwandeln?:

    ng> ist ein Header und die Funktion ist dort seit C++ 11 enthalten, wie du der von @DirkB verlinkten Dokumentation entnehmen kannst

    Das <string> ein Header ist, ist mir schon klar. Aber ich konnte das irgendwie schon immer Strings erstellen ohne Strings zu inkludieren.



  • @redexception sagte in String in Float umwandeln?:

    Aber ich konnte das irgendwie schon immer Strings erstellen ohne Strings zu inkludieren.

    Das ist möglich, da andere Header ihrerseits den Header schon benutzen dürfen. Das muss aber nicht immer funktionieren. Wenn du etwas aus einem Header benutzen möchtest, schreib ein include, dann bist du auf der sicheren Seite.


Log in to reply