c++ - throwing - Función stoi no declarada
strtoint c++ (12)
¿Está ejecutando C ++ 11? stoi se agregó en C ++ 11, si está ejecutando una versión anterior, use atoi ()
Estoy intentando usar stoi para convertir una cadena en un entero, sin embargo, dice que no está declarada. Tengo la biblioteca estándar y la incluida, pero aún dice "[Error] ''stoi'' no se declaró en este ámbito"
El código es el siguiente:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int main()
{
string end, init;
cout << "Introduction" << endl;
cout << "Start time (xx:yy)" << endl;
cin >> init;
string hours0 = init.substr(0,2);
int hours = stoi(hours0);
cout << hours << endl;
system("pause");
return 0;
}
O dime por qué no funciona o dame una segunda opción para hacerlo, por favor.
Agregue esta opción: -std=c++11
mientras compila su código
g++ -std=c++11 my_cpp_code.cpp
En los comentarios bajo otra respuesta, usted indicó que está usando una versión poco fiable de g++
en MS Windows.
En este caso, -std=c++11
como lo sugiere la respuesta superior, aún no solucionaría el problema.
Por favor vea el siguiente hilo que discute su situación: std :: stoi no existe en g ++ 4.6.1 en MinGW
Instale la última versión de TDM-GCC aquí es el enlace: http://wiki.codeblocks.org/index.php/MinGW_installation
Las respuestas anteriores son correctas, pero no están bien explicadas.
g++ -std=c++11 my_cpp_code.cpp
Agregue -std = c ++ 11 a sus opciones de compilador, ya que lo más probable es que esté usando una versión anterior de debian o ubuntu que no está usando por defecto el nuevo estándar c ++ 11 de g ++ / gcc. Tuve el mismo problema en Debian Wheezy.
muestra en escritura muy pequeña a la derecha en verde que se requiere c ++ 11.
Me encontré con este error mientras trabajaba en un proyecto de programación en c ++,
- atoi (), stoi () no forma parte de la antigua biblioteca de c ++ en g ++, por lo tanto, use las siguientes opciones mientras compila g ++ -std = c ++ 11 -o my_app_code my_app_code.cpp
- Incluya el siguiente archivo en su código #include <cstdlib>
Esto debería hacerse cargo de los errores.
en lugar de esta línea -
int horas = stoi (hours0);
escribe esto -
int horas = atoi (hours0.c_str ());
stoi está disponible "desde C ++ 11". Asegúrese de que su compilador esté actualizado.
Puedes probar atoi (hours0.c_str ()) en su lugar.
std::stoi
fue introducido en C ++ 11. Asegúrese de que la configuración de su compilador sea correcta y / o su compilador sea compatible con C ++ 11.
CMakeLists.txt
solucionar este problema agregando las siguientes líneas a mi CMakeLists.txt
:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
Como lo mencionaron los otros becarios, ese es el problema -std=c++11
.
stoi
es una función de C ++ 11. Si no está utilizando un compilador que entiende C ++ 11, esto simplemente no se compilará.
Puedes usar una stringstream
lugar de leer la entrada:
stringstream ss(hours0);
ss >> hours;
#include <algorithm>
Incluya esto y luego puede compilarlo usando ...
g ++ -Wall -std = c ++ 11 test.cpp -o test
También puede agregar "cd / d% ~ dp0" como la primera línea de un archivo .bat en el mismo directorio que el archivo de origen, de modo que todo lo que tiene que hacer es hacer doble clic en el archivo .bat para una compilación "automatizada".
¡Espero que esto ayude!