使用ubuntu在C ++中使用std :: stoi的问题

时间:2013-03-18 00:59:51

标签: c++ string

当我尝试编译下面的简单程序时,我收到编译错误。

error: ‘stoi’ was not declared in this scope

我尝试同时包含#include <string>#include <string.h>,但我仍然遇到这些问题。我正在使用Ubuntu,我不记得我是如何安装g ++的,但我确信它使用的是apt-get install g ++命令,因此我不知道我使用的是什么版本的g ++或C ++库。

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

struct Data
{
    string fname;
    string lname;
    int age;
};

int main()
{
    bool toContinue = true;
    Data data;
    string buffer;
    do
    {
        try
        {
            getline(cin,data.fname);
            getline(cin,data.lname);
            getline(cin,buffer);
            data.age = stoi(buffer);
            cout<<data.fname<<" ";
            cout<<data.lname<<" ";
            cout<<data.age<<endl;
        }
        catch(std::invalid_argument)
        {
            cerr<<"Unable to parse integer";
        }
    }while(toContinue);

    return 0;
}

我的目标是能够在用户输入任何变量的垃圾时使用异常处理。

2 个答案:

答案 0 :(得分:5)

如果你看看documentation,你会发现它是在C ++ 11中引入的。您必须使用-std=c++11选项编译代码才能启用这些功能,因为默认情况下代码不会编译为C ++ 11。

Drew评论说如果你使用的是C ++ 03,你可以使用

boost::lexical_cast<int>(buffer)

答案 1 :(得分:2)

事实证明我需要这个才能让它发挥作用......

g++ -std=c++0x ./main.cpp