g++ 4.7.2中是否缺少std::stoi函数?

11

当我尝试使用std :: stoi并尝试编译它时,我收到错误消息“stoi不是std的成员”。 我正在使用命令行中的g ++ 4.7.2,因此不能是IDE错误,我已经按顺序包含了所有内容,并且g ++ 4.7.2默认使用c ++ 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;
}

无法编译,但它本身没有问题。


当然是的!(http://ideone.com/sKmUmf) - Alok Save
如果您想获得实际的帮助,您必须展示实际的代码。 - Benjamin Bannier
1
代码没问题。你想让我展示哪段代码?一个完全有效但无法工作的 std::stoi 调用吗? - AerosolSP
2个回答

16

std::stoi() 出现在 C++11,因此您需要确保使用以下编译选项进行编译:

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

或者

g++ -std=c++0x example.cpp

7
也不起作用。此外,-std=c++11似乎已默认启用。我正在处理的代码之一的编译器警告就是这样说的(请注意,上面的代码只是告诉我stoi不是stoi的成员函数,因此问题并不在我的代码中)。 - AerosolSP
我将你的代码保存为example.cpp并尝试了一下:g++ example.cpp,结果出现了你提到的错误。当我添加了-std=c++11-std=c++0x其中之一时,它就可以编译和运行了。我的笔记本电脑上的g++手册显示gnu++98是C++的默认方言。 - CanadaRox
3
把刚才的都删掉。现在我知道为什么它不起作用了。要在指定要编译的源代码文件名之前设置标志…我之前不知道这一点,也没有看到任何指出这一事实的东西。问题解决了。 - AerosolSP
这对我来说也是个好消息,很高兴你解决了它! - CanadaRox
“flag has to be set” 是什么意思?哪个标志?我也遇到了类似的问题。 - Mohsin

4

对于旧版本的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;
}

编译错误:在使用“g++ -std=c++98”时,“atoi”不是“std”的成员。 - Rapnar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接