2012-09-27 7 views
13

Ich versuche, eine std::string in einer std::vector gespeicherten in eine ganze Zahl zu konvertieren und es an eine Funktion als Parameter übergeben.Convert std :: string in ganze Zahl

Dies ist eine vereinfachte Version von meinem Code:

vector <string> record; 
functiontest(atoi(record[i].c_str)); 

Mein Fehler ist wie folgt:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’ 

Wie kann ich das tun?

+0

Sie müssen * Anruf *, aber es gibt viele bessere Methoden als 'atoi'. – chris

+3

Typo 'record [i] .c_str' ->' record [i] .c_str() '. – Hindol

Antwort

29

Mit C++ 11:

int value = std::stoi(record[i]); 
+4

Ziemlich hilfreich. Für weniger als C++ 11 gibt es ein solides Beispiel? –

+11

** Reader Vorsicht: ** Wenn Sie nicht 100% sicher sind, dass die Eingabe für 'std :: stoi 'immer eine gültige Ganzzahl ** ist, müssen Sie einen' try/catch 'für einrichten 'std :: invalid_argument'. – CodeMouse92

+1

Und auch für 'std :: out_of_range'. – ebk

11
record[i].c_str 

ist nicht das gleiche wie

record[i].c_str() 

Sie können dies tatsächlich erhalten aus der Fehlermeldung: Die Funktion erwartet eine const char*, aber Sie sind ein Argument vom Typ const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const bereitzustellen, die auf ein Zeiger eine Memberfunktion der Klasse std::basic_string<char, std::char_traits<char>, std::allocator<char> >, die const char* zurückgibt und keine Argumente annimmt.

+0

Whoops! Danke Kumpel ahah –

+0

@Luchiab Grigore –

+0

Ich kann sehen, wie die andere Antwort besser ist, aber ich glaube nicht, dass dieser einen Downvote verdient ... –

12

Verwenden Sie stringstream aus der Standardbibliothek. Es ist sauberer und es ist eher C++ als C

int i3; 
std::stringstream(record[i]) >> i3; 
+0

oder http: // en .cppreference.com/w/cpp/zeichenfolge/basic_string/stol –

+0

@ BЈovie Sehr nett. Für C++ 11 weiter, obwohl – Indy9000

+0

Ich denke, es muss slooooow sein wie alle Streams – javapowered

0
#include <boost/lexical_cast.hpp> 

functiontest(boost::lexical_cast<int>(record[i]));