J'essaie d'utiliser stoi pour convertir une chaîne en un entier, mais il dit que ce n'est pas déclaré. J'ai la bibliothèque standard et l'inclus, mais il dit toujours "[Erreur] 'stoi' n'a pas été déclaré dans cette portée"
Le code est le suivant:
#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;
}
Dites-moi pourquoi cela ne fonctionne pas ou donnez-moi une deuxième option, s'il vous plaît.
std::stoi
a été introduit en C++ 11. Assurez-vous que les paramètres de votre compilateur sont corrects et/ou que votre compilateur prend en charge C++ 11.
Les réponses ci-dessus sont correctes, mais pas bien expliquées.
g++ -std=c++11 my_cpp_code.cpp
Ajoutez -std = c ++ 11 aux options de votre compilateur, car vous utiliserez probablement une ancienne version de debian ou d'ubuntu qui n'utilise pas par défaut le nouveau standard c ++ 11 de g ++/gcc. J'ai eu le même problème sur Debian Wheezy.
http://fr.cppreference.com/w/cpp/string/basic_string/stol
montre en très petite écriture à droite en vert que c ++ 11 est requis.
stoi
est une fonction C++ 11. Si vous n'utilisez pas un compilateur comprenant C++ 11, cela ne compilera tout simplement pas.
Vous pouvez utiliser une stringstream
à la place pour lire l'entrée:
stringstream ss(hours0);
ss >> hours;
stoi est disponible "depuis C++ 11". Assurez-vous que votre compilateur est à jour.
Vous pouvez essayer atoi (hours0.c_str ()) à la place.
au lieu de cette ligne -
int heures = stoi (heures0);
écrire cela -
int heures = atoi (heures0.c_str ());
Dans les commentaires sous une autre réponse, vous avez indiqué que vous utilisiez une version louche de g++
sous MS Windows.
Dans ce cas, -std=c++11
, comme suggéré par la réponse du haut, ne résoudrait toujours pas le problème.
Veuillez consulter le fil suivant qui traite de votre situation: std :: stoi n'existe pas en g ++ 4.6.1 sur MinGW
Installez la dernière version de TDM-GCCle lien est présent - http://wiki.codeblocks.org/index.php/MinGW_installation
J'ai réussi à résoudre ce problème en ajoutant les lignes suivantes à mon 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()
Comme mentionné par les autres membres, c’est le problème -std=c++11
.
#include <algorithm>
Incluez ceci et vous pourrez ensuite le compiler en utilisant ...
g ++ -Wall -std = c ++ 11 test.cpp -o test
Vous pouvez également ajouter "cd/d% ~ dp0" comme première ligne d'un fichier .bat dans le même répertoire que votre fichier source. Il vous suffira donc de double-cliquer sur le fichier .bat pour obtenir une compilation "automatisée".
J'espère que cela t'aides!
Est-ce que vous utilisez C++ 11? stoi a été ajouté en C++ 11, si vous utilisez une version plus ancienne, utilisez atoi ()
Ajoutez cette option: -std=c++11
lors de la compilation de votre code
g++ -std=c++11 my_cpp_code.cpp