Problem mit atoi() und atof()



  • bei mir funktionieren atoi() und atof nicht. hier meine fkt. wo ich diese eingesetzt habe:

    void explode(string res, Datensatz& daten)
    {
    	int leerzeichen1, leerzeichen2;
    	string sindex, swert1, swert2;
    	leerzeichen1 = res.find(" ");
    	sindex = kopieren(res, 0, (leerzeichen1 - 1));
    	leerzeichen2 = res.rfind(" ");
    	swert1 = kopieren(res, leerzeichen1 + 1, leerzeichen2 - 1);
    	swert2 = kopieren(res, leerzeichen2 + 1, (res.length() - 1));
    	daten.index = atoi(sindex);
    	daten.wert1 = (float)atof(swert1);
    	daten.wert2 = atoi(swert2);
    }
    

    und hier der fehler:

    --------------------Konfiguration: ausschlagerkennung - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    C:\Dokumente und Einstellungen\praktikum\Desktop\ausschlagerkennung\main.cpp(57) : error C2664: 'atoi' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' n
    icht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\Dokumente und Einstellungen\praktikum\Desktop\ausschlagerkennung\main.cpp(58) : error C2664: 'atof' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' n
    icht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\Dokumente und Einstellungen\praktikum\Desktop\ausschlagerkennung\main.cpp(59) : error C2664: 'atoi' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' n
    icht moeglich
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    Fehler beim Ausführen von cl.exe.

    ausschlagerkennung.exe - 3 Fehler, 0 Warnung(en)



  • afair erwarten diese funktionen const chars* und keine strings!

    mach es doch über stringstream oder so wenn du strings verwendest!



  • Soweit ich weiß brauchst du keinen string sonder ein char

    const char* sindex;
    


  • Entweder du gibst einen C-String zurück:

    daten.index = atoi( sindex.c_str() );
    

    char* ist völlig unnötig!

    Oder du programmierst gleich komplett C++. 😉 Denn atoi() ist aus C.

    1. boost::lexical_cast ist super komfortabel! (ist auch für den nächsten C++ Standard nominiert)

    oder 2. du nimmst std::stringstream. In der Forum-FAQ gibts dazu einen Beitrag.



  • Hallo,

    Hier ein Vorschlag:

    template <typename T>
       bool from_string(T& t, 
                      const std::string& s, 
                      std::ios_base& (*f)(std::ios_base&))
       {
          std::istringstream iss(s);
          return !(iss >> f >> t).fail();
       }
    

    benutzen tut mans dann so

    int i;
       if !from_string<int>(i, meinString, std::dec /*oder std::hex... */)
          //fehlerbehandlung
    

Anmelden zum Antworten