我的操作系统是ubuntu 14.04,笔记本电脑,i7。
g ++版本为g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
。
我尝试运行一个简单的代码来测试stoi
:
#include <string>
int main()
{
std::string s = "123";
int i = std::stoi(s);
}
当我用g++ -g prueba2.cpp
编译它时,我得到:
prueba2.cpp: In function ‘int main()’:
prueba2.cpp:6:12: error: ‘stoi’ is not a member of ‘std’
int i = std::stoi(s);
^
当我先使用g++ -std=c++0x -g prueba2.cpp
(我也尝试使用-std = c ++ 11)然后使用dbg
调试两次时,我得到了:
然后,我也进行了一次简单的搜索,并按照here1,here2和here3中提出的建议进行了搜索,但都没有。
我在做些傻事吗?
答案 0 :(得分:1)
std::cout
语句的代码,并且您可能在没有-std=c++11
的情况下执行了编译步骤,这将导致std::stoi
不被包含在内{bee} std::stoi
1}}来自C ++ 11及更高版本。结果仍然是旧的可执行文件,它什么都没打印出来。
使用-std=c++11
重新编译,并确保正确保存文件。 Your code clearly works.
注意:Windows上MinGW的GCC的vanilla端口存在缺陷,并且有一些与C ++ 11及其后续相关的错误;使用MinGW-w64,如果您决定在Windows上编译,可以帮助解决问题。
答案 1 :(得分:0)
std::stoi
是C ++ 11的一项功能。因此,如果您使用-std=c++11
标志(或您提到的等效-std=c++0x
标志,其中没有与调试有关),则您的代码仅进行编译。
您提供的终端会话还显示编译与这些标志一起使用,您的程序运行正常,没有任何问题。如果要打印已解析的结果,可以这样做:std::cout << i << std::endl
如果您不想使用C ++ 11功能,可以使用>>
流运算符将字符串解析为int
:
stringstream ss(s);
int i;
ss >> n;
但要注意:除了stoi
之外,如果您的输入不包含有效数字,则您不会获得例外。您必须自己检查流的状态。