Функция 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;

}

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

9 ответов


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


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

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

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

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

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


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

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

stringstream ss(hours0);
ss >> hours;

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

вы можете попробовать atoi (hours0.c_str()) вместо этого.


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

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

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


вместо этой линии -

int hours = stoi (hours0);

написать это -

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


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


установите последнюю версию TDM-GCC вот ссылка -http://wiki.codeblocks.org/index.php/MinGW_installation


#include <algorithm>

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

G++ -Wall-std=c++11 тест.cpp-o test

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

надеюсь, что это помогает!