我正在尝试获取一个字符串并将其解析为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
答案 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 question,answer解释如何摆脱剩余的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;
}