web-dev-qa-db-fra.com

Fonction stoi non déclarée

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.

16
user3258512

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.

20
Captain Obvlious

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.

15
Eamonn Kenny

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;
9
nneonneo

stoi est disponible "depuis C++ 11". Assurez-vous que votre compilateur est à jour.

Vous pouvez essayer atoi (hours0.c_str ()) à la place.

8
Daniel

au lieu de cette ligne - 

int heures = stoi (heures0);

écrire cela - 

int heures = atoi (heures0.c_str ());

2
pistol_pete

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

1
M.M

Installez la dernière version de TDM-GCCle lien est présent - http://wiki.codeblocks.org/index.php/MinGW_installation

0
Riya Arora

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.

0
Färid Alijani
#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!

0
Doug

Est-ce que vous utilisez C++ 11? stoi a été ajouté en C++ 11, si vous utilisez une version plus ancienne, utilisez atoi ()

0
Sisnett

Ajoutez cette option: -std=c++11 lors de la compilation de votre code

g++ -std=c++11 my_cpp_code.cpp
0
Nassima Noufail