2

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

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

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

4

2 回答 2

5

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

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

boost::lexical_cast<int>(buffer)

于 2013-03-18T01:01:45.303 回答
2

事实证明,我需要这个才能让它工作......

g++ -std=c++0x ./main.cpp
于 2013-03-20T00:36:53.857 回答