Functie STOI niet verklaard

Ik probeer stoite 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::stoiwerd 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%

stoiis een C++11-functie. Als je geen compiler gebruikt die C++11 begrijpt, zal deze gewoon niet compileren.

Je kunt in plaats daarvan een stringstreamgebruiken 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++11zoals 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++,

  1. 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
  2. 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++11tijdens 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.

Other episodes