std::stoi отсутствует в g++ 4.7.2?

Я получаю сообщение об ошибке «stoi не является членом std», когда пытаюсь использовать std::stoi и пытаюсь его скомпилировать. Я использую g++ 4.7.2 из командной строки, поэтому это не может быть ошибка IDE, у меня все включено в порядке, а g++ 4.7.2 по умолчанию использует С++ 11. Если это поможет, моя ОС — Ubuntu 12.10. Я что-то не настроил?

#include <iostream>
#include <string>

using namespace std;

int main(){
  string theAnswer = "42";
  int ans = std::stoi(theAnswer, 0, 10);

  cout << "The answer to everything is " << ans << endl;
}

Не компилируется. Но в этом нет ничего плохого.


person AerosolSP    schedule 07.02.2013    source источник
comment
Конечно!   -  person Alok Save    schedule 07.02.2013
comment
Вы должны показать фактический код, если вам нужна реальная помощь.   -  person Benjamin Bannier    schedule 07.02.2013
comment
Хотя код в порядке. Какой код вы хотите, чтобы я показал? Совершенно правильный вызов std::stoi, который не работает?   -  person AerosolSP    schedule 07.02.2013


Ответы (2)


std::stoi() является новым в C++11, поэтому вы должны убедиться, вы скомпилируете его с помощью:

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

or

g++ -std=c++0x example.cpp
person CanadaRox    schedule 07.02.2013
comment
Тоже не работает. Кроме того, -std=c++11, по-видимому, включен по умолчанию. Одно из моих предупреждений компилятора для кода, над которым я работаю, говорит об этом (обратите внимание, приведенный выше код просто говорит мне, что stoi не является членом stoi, поэтому проблема не в моем коде). - person AerosolSP; 07.02.2013
comment
Я сохранил ваш код как example.cpp и попробовал: g++ example.cpp и получил указанную вами ошибку. Когда я добавляю -std=c++11 или -std=c++0x, он компилируется и работает нормально. Страница руководства g++ на моем ноутбуке говорит, что gnu++98 является диалектом по умолчанию для C++. - person CanadaRox; 07.02.2013
comment
Сотри все это. Теперь я знаю, почему это не сработало. Флаг должен быть установлен до того, как вы укажете имя файла исходного кода для компиляции... я не знал об этом, и я нигде не видел ничего, что указывало бы на этот факт. Дело закрыто. - person AerosolSP; 07.02.2013
comment
Для меня это тоже новость, рад, что вы разобрались! - person CanadaRox; 08.02.2013
comment
что вы подразумеваете под «флаг должен быть установлен??? какой флаг? я застрял на похожей проблеме - person Mohsin; 29.10.2016

Для более старых версий компилятор C++ не поддерживает stoi. для более старой версии вы можете использовать следующий фрагмент кода для преобразования строки в целое число.

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main() {
    string input;
    cin >> input;
    int s = std::atoi(input.c_str());
    cout<<s<<endl;
    return 0;
}
person BeingMIAkashs    schedule 08.11.2015
comment
получил ошибку: «atoi» не является членом «std» с g++ -std=c++98 - person Rapnar; 17.05.2016