在C ++ 11中解析int - stoi

时间:2014-01-25 17:57:50

标签: c++ parsing c++11 namespaces std

我正在尝试获取一个字符串并将其解析为int。我已经阅读了很多答案,似乎使用stoi是最新的方式。在我看来stoi使用std,但我得到Function 'stoi' could not be resolved despitre using namespace std;

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

using namespace std;

int main(int argc, char* argv[]) {

    string line = "";
    string five = "5";
    int number = stoi(five); //Error here with stoi
    return 0;
}

任何想法导致了什么?

更新

我正在使用Eclipse。我的旗帜是:-c -fmessage-length=0 -std=c++11

3 个答案:

答案 0 :(得分:2)

如果您正在使用GCC或MINGW,那么这就是答案: std::stoi doesn't exist in g++ 4.6.1 on MinGW

  

这是vswprintf on的非标准声明的结果   视窗。 GNU标准库定义   此平台上的_GLIBCXX_HAVE_BROKEN_VSWPRINTF,它会禁用您尝试使用的转换功能。您可以   在这里阅读有关此问题和宏的更多信息:   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37522

     

如果您愿意修改随MinGW分发的头文件,   你可以通过删除来解决这个问题   !在第2754行定义(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)宏   ... / lib / gcc / mingw32 / 4.6.1 / include / c ++ / bits / basic_string.h,并添加   它返回到2905到2965行(引用的行   的std :: vswprintf)。您将无法使用std :: to_wstring   函数,但许多其他转换函数应该是   可用。

请始终提供平台和编译器信息。

答案 1 :(得分:0)

在编译器标志中切换C ++ 11支持。最近的gcc -std=c++11。对于Eclipse,请参阅FAQ中的corresponding questionanswer解释如何摆脱剩余的Eclipse警告。

答案 2 :(得分:0)

如果您能够以另一种方式解析int,那么如何使用STL算法和C ++ 11 lambda表达式呢?

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main() {
    string str = "12345";

    int num = 0;

    for_each(str.begin(), str.end(), [&num](char c){ num = 10 * num + (c - '0');  });

    cout << str << " = " << num << endl;
}