2012-09-27 33 views
13

Estoy tratando de convertir un std::string en un std::vector a un número entero y pasarlo a una función como parámetro.Convertir std :: cadena en entero

Ésta es una versión simplificada de mi código:

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

Mi error es como sigue:

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

¿Cómo puedo hacer esto?

+0

Necesitas * llamada *, pero hay muchos métodos mejores que 'atoi'. – chris

+3

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

Respuesta

29

con C++ 11:

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

Muy útil. Para menor que C++ 11, ¿hay algún ejemplo sólido? –

+11

** Cuidado con el lector: ** Si no está 100% seguro de que la entrada a 'std :: stoi' ** siempre será un número entero válido **, necesitará configurar un' try/catch' para 'std :: invalid_argument'. – CodeMouse92

+1

Y también para 'std :: out_of_range'. – ebk

11
record[i].c_str 

no es lo mismo que

record[i].c_str() 

Usted puede conseguir realmente esto desde el mensaje de error: la función espera un const char*, pero usted está proporcionando un argumento de tipo const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const que es un puntero a una función miembro de la clase std::basic_string<char, std::char_traits<char>, std::allocator<char> > que devuelve const char* y no toma argumentos.

+0

¡Vaya! gracias compañero ahah –

+0

@Luchiab Grigore –

+0

Puedo ver cómo la otra respuesta es mejor, pero no creo que este se merece un voto negativo ... –

12

Utilice stringstream de la biblioteca estándar. Es más limpio y es más bien C++ que C.

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

o http: // en .cppreference.com/w/cpp/string/basic_string/stol –

+0

@ BЈовић Muy bonito. Para C++ 11 en adelante, aunque – Indy9000

+0

supongo que debe ser sloooow como cualquier secuencia – javapowered

0
#include <boost/lexical_cast.hpp> 

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