Функция stoi не объявлена

Я пытаюсь использовать stoi для преобразования строки в целое число, однако он говорит, что он не объявлен. У меня есть стандартная библиотека и включенная, но она все еще говорит: "[Ошибка]" stoi "не был объявлен в этой области"

Код следующий:

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

}

Скажите мне, почему он не работает, или дайте мне второй вариант, пожалуйста.

Ответ 1

std::stoi был представлен на С++ 11. Убедитесь, что ваши настройки компилятора верны и/или ваш компилятор поддерживает С++ 11.

Ответ 2

Ответы выше верны, но не очень хорошо объяснены.

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

Добавьте -std = С++ 11 к вашим опциям компилятора, так как вы, скорее всего, используете более старую версию debian или ubuntu, которая по умолчанию не использует новый стандарт С++ 11 g++/gcc. У меня была такая же проблема на Debian Wheezy.

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

очень маленьким шрифтом справа зеленым цветом показано, что требуется С++ 11.

Ответ 3

stoi - это функция С++ 11. Если вы не используете компилятор, который понимает С++ 11, это просто не будет компилироваться.

Вместо этого вы можете использовать stringstream, чтобы прочитать ввод:

stringstream ss(hours0);
ss >> hours;

Ответ 4

stoi доступен "с С++ 11". Убедитесь, что ваш компилятор обновлен.

Вместо этого вы можете использовать atoi (hours0.c_str()).

Ответ 5

вместо этой строки -

int hours = stoi(hours0);

напишите это -

int hours = atoi(hours0.c_str());

Ссылка : int atoi (const char * str)

Ответ 6

В комментариях в соответствии с другим ответом вы указали, что используете изящную версию g++ под MS Windows.

В этом случае -std=c++11, как было предложено верхним ответом, все равно не устранит проблему.

См. следующий раздел, который обсуждает вашу ситуацию: std:: stoi не существует в g ​​++ 4.6.1 на MinGW

Ответ 7

Вы используете С++ 11? stoi был добавлен в С++ 11, если вы используете более старую версию, используйте atoi()

Ответ 9

#include <algorithm>

Включите это, а затем вы можете скомпилировать его с помощью...

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

Вы также можете добавить "cd/d% ~ dp0" в качестве первой строки .bat файла в том же каталоге, что и ваш исходный файл, поэтому все, что вам нужно сделать, это двойной щелчок на файле .bat для "автоматизированного" компиляция.

Надеюсь, это поможет!

Ответ 10

Добавьте эту опцию: -std=c++11 при компиляции вашего кода

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

Ответ 11

Мне удалось решить эту проблему, добавив следующие строки в мой 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()

Как уже упоминали другие участники, это -std=c++11.

Ответ 12

Я столкнулся с этой ошибкой, работая над проектом по программированию в c++,

  1. atoi(), stoi() не является частью старой библиотеки c++ в g++, поэтому при компиляции используйте следующие параметры g++ -std = c++ 11 -o my_app_code my_app_code.cpp
  2. Включите следующий файл в свой код #include & lt; cstdlib>

Это должно позаботиться об ошибках