Ik probeer stoi
te gebruiken om een reeks naar een geheel getal te converteren, maar het zegt dat het niet is aangegeven. Ik heb de standaardbibliotheek en de <string>
inbegrepen, maar het zegt nog steeds [Error] 'stoi' was not declared in this scope
De code is het volgende:
#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;
}
Vertel me waarom het niet werkt, of geef me een tweede optie om het te doen, alstublieft.
Antwoord 1, Autoriteit 100%
std::stoi
werd geïntroduceerd in C++ 11. Zorg ervoor dat uw compiler-instellingen correct zijn en / of uw compiler ondersteunt C++ 11.
Antwoord 2, Autoriteit 66%
De bovenstaande antwoorden zijn correct, maar niet goed uitgelegd.
g++ -std=c++11 my_cpp_code.cpp
Voeg -std = C++ 11 toe aan uw compiler-opties omdat u waarschijnlijk een oudere versie van Debian of Ubuntu gebruikt die niet standaard gebruikt, de nieuwe C++ 11-standaard van G ++ / GCC. Ik had hetzelfde probleem op Debian Wheezy.
http://en.cppreference.com/w/cpp/string/ Basic_String / Stol
toont echt kleinschrijven aan het recht in groen dat C++ 11 vereist is.
Antwoord 3, Autoriteit 31%
stoi
is een C++11-functie. Als je geen compiler gebruikt die C++11 begrijpt, zal deze gewoon niet compileren.
Je kunt in plaats daarvan een stringstream
gebruiken om de invoer te lezen:
stringstream ss(hours0);
ss >> hours;
Antwoord 4, autoriteit 31%
stoi is beschikbaar “sinds C++11”. Zorg ervoor dat uw compiler up-to-date is.
Je kunt in plaats daarvan atoi(hours0.c_str()) proberen.
Antwoord 5, autoriteit 22%
in plaats van deze regel –
int hours = stoi(hours0);
schrijf dit –
int hours = atoi(hours0.c_str());
Referentie:
int atoi(const char *str)
Antwoord 6, autoriteit 3%
In opmerkingen onder een ander antwoord gaf je aan dat je een onbetrouwbare versie van g++
onder MS Windows gebruikt.
In dit geval zou -std=c++11
zoals voorgesteld door het bovenste antwoord het probleem nog steeds niet oplossen.
Zie de volgende thread waarin uw situatie wordt besproken: std::stoi bestaat niet in g++ 4.6.1 op MinGW
Antwoord 7, autoriteit 3%
Ik kwam deze fout tegen tijdens het werken aan een programmeerproject in c++,
- atoi(),stoi() maakt geen deel uit van de oude c++-bibliotheek in g++, dus gebruik de onderstaande opties tijdens het compileren
g++ -std=c++11 -o mijn_app_code mijn_app_code.cpp - Voeg het volgende bestand toe aan je code #include < cstdlib >
Dit zou voor de fouten moeten zorgen
Antwoord 8
Gebruik je C++ 11? stoi is toegevoegd in C++ 11, als je een oudere versie gebruikt, gebruik dan atoi()
Antwoord 9
Installeer de nieuwste versie van TDM-GCC
hier is de link-http://wiki.codeblocks.org/index.php/MinGW_installation
Antwoord 10
#include <algorithm>
Voeg dit toe en dan kun je het compileren met…
g++ -Wall -std=c++11 test.cpp -o test
U kunt ook “cd /d %~dp0” toevoegen als de eerste regel van een .bat-bestand in dezelfde map als uw bronbestand, dus u hoeft alleen maar te dubbelklikken op het .bat-bestand voor een “automatisch ” compilatie.
Hopelijk helpt dit!
Antwoord 11
Voeg deze optie toe: -std=c++11
tijdens het compileren van uw code
g++ -std=c++11 my_cpp_code.cpp
Antwoord 12
Ik heb dit probleem kunnen oplossen door de volgende regels toe te voegen aan mijn 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()
Zoals vermeld door de andere fellows, is dat het probleem -std=c++11
.