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