web-dev-qa-db-ger.com

Funktionstoi nicht deklariert

Ich versuche, stoi zu verwenden, um eine Zeichenfolge in eine Ganzzahl umzuwandeln, es heißt jedoch, dass sie nicht deklariert ist. Ich habe die Standardbibliothek und die mitgelieferte, aber sie sagt immer noch "[Fehler] 'stoi' wurde nicht in diesem Bereich deklariert"

Der Code lautet wie folgt:

#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;

}

Sagen Sie mir entweder, warum es nicht funktioniert, oder geben Sie mir eine zweite Option, bitte.

16
user3258512

std::stoi wurde in C++ 11 eingeführt. Stellen Sie sicher, dass Ihre Compilereinstellungen korrekt sind und/oder Ihr Compiler C++ 11 unterstützt.

20

Die obigen Antworten sind richtig, aber nicht gut erklärt. 

g++ -std=c++11 my_cpp_code.cpp

Fügen Sie den Compileroptionen -std = c ++ 11 hinzu, da Sie höchstwahrscheinlich eine ältere Version von debian oder ubuntu verwenden, die standardmäßig nicht den neuen c ++ 11-Standard von g ++/gcc verwendet. Ich hatte das gleiche Problem bei Debian Wheezy. 

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

zeigt in wirklich kleiner Schrift nach rechts in grün, dass C++ 11 erforderlich ist.

15
Eamonn Kenny

stoi ist eine C++ 11-Funktion. Wenn Sie keinen Compiler verwenden, der C++ 11 versteht, wird dies einfach nicht kompiliert.

Sie können stattdessen eine stringstream verwenden, um die Eingabe zu lesen:

stringstream ss(hours0);
ss >> hours;
9
nneonneo

stoi ist "seit C++ 11" verfügbar. Stellen Sie sicher, dass Ihr Compiler auf dem neuesten Stand ist.

Sie können stattdessen atoi (hours0.c_str ()) versuchen.

8
Daniel

statt dieser Linie - 

int Stunden = Stoi (Stunden 0);

schreib Dies - 

int stunden = atoi (stunden0.c_str ());

2
pistol_pete

In Kommentaren unter einer anderen Antwort haben Sie angegeben, dass Sie unter MS Windows eine zwielichtige Version von g++ verwenden.

In diesem Fall würde -std=c++11, wie von der ersten Antwort vorgeschlagen, das Problem immer noch nicht beheben.

Bitte sehen Sie sich den folgenden Thread an, der Ihre Situation bespricht: std :: stoi existiert nicht in g ++ 4.6.1 auf MinGW

1
M.M

Installieren Sie die neueste Version von TDM-GCCEs gibt den Link - http://wiki.codeblocks.org/index.php/MinGW_installation

0
Riya Arora

Ich konnte dieses Problem beheben, indem ich meinem CMakeLists.txt die folgenden Zeilen hinzufügte:

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()

Wie von den anderen Stipendiaten erwähnt, ist dies die Ausgabe von -std=c++11.

0
Färid Alijani

Ich bin auf diesen Fehler gestoßen, als ich an einem Programmierprojekt in C++ gearbeitet habe.

  1. atoi (), stoi () ist nicht Teil der alten c ++ - Bibliothek in g ++. Verwenden Sie daher beim Kompilieren von g ++ -std = c ++ 11 -o my_app_code my_app_code.cpp die folgenden Optionen
  2. Fügen Sie die folgende Datei in Ihren Code ein #include <cstdlib>

Dies sollte die Fehler beheben

0
Nnaik
#include <algorithm>

Fügen Sie dies ein und dann können Sie es mit ...

g ++ - Wall -std = c ++ 11 test.cpp -o test

Sie können auch "cd/d% ~ dp0" als erste Zeile einer .bat-Datei im selben Verzeichnis wie Ihre Quelldatei hinzufügen. Sie müssen also nur auf die .bat-Datei doppelklicken, um eine "automatisierte" Kompilierung durchzuführen.

Hoffe das hilft!

0
Doug

Führen Sie C++ 11 aus? stoi wurde in C++ 11 hinzugefügt, wenn Sie eine ältere Version verwenden, verwenden Sie atoi ()

0
Sisnett

Fügen Sie diese Option hinzu: -std=c++11, während Sie Ihren Code kompilieren

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