函数'stof'无法解析。

7

我以前遇到过这个问题,但找到了一个解决方法,只是这一次,解决方法不是一个选项。

我正在尝试使用'stof'函数,但我收到错误消息,显示:

'stof'不是'std'的成员 无法解析函数'stof'

我按照此页面上显示的方式使用它:http://www.cplusplus.com/reference/string/stof/

这是我的包含内容:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

那么,我做错了什么?如果找不到解决方案,是否可以指导我另一种将字符串转换为浮点数并在字符串不兼容时引发异常的方法?

编辑:添加样本程序和错误。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main()
{
   string testString = "";
   float testFloat = 0.0;
   testFloat = std::stof(testString);

   return 0;
}

我收到的错误如下:

描述 资源路径 位置 类型 'stof' 不是 'std' 的成员 main.cpp /Assignment/src 第33行 C/C++问题

描述 资源路径 位置 类型 函数 'stof' 无法解析 main.cpp /Assignment/src 第33行 语义错误


7
std::stof 是 C++11 标准中新增的函数。您确定使用的是兼容 C++11 的编译器吗? - Michael Kristofik
1
我不太确定,我的C++经验不是很丰富,但我有“-std=c++11”作为我的命令之一。 - Joseph Little
3
你是不是偶然使用MinGW?这里有一个 未解决的错误报告 可能可以解释为什么它对你不起作用。 - Michael Kristofik
@JosephLittle,这些错误不可能来自你发布的代码。你的代码里没有33行。你使用任何集成开发环境吗?如果使用,确保该IDE实际上使用的是你认为使用的编译器(并且具有正确的设置)。 - Cubic
啊,抱歉,它们来自代码,只是我在测试这个时注释掉了很多其他的 #includes。 我正在使用 Eclipse,并且它正在使用 MinGW(在构建输出中如此显示)。 - Joseph Little
显示剩余5条评论
2个回答

12

stof是C++11的一个函数。请确保您的编译器支持它(尽管大多数现代编译器都支持相当大的子集,但没有编译器完全支持C++11)。

例如,在g ++上,您必须使用-std=c++11选项启用它(std=c++0x预先g++-4.7)。

如果您正在使用g++,请使用g++ -v检查您使用的版本-如果它是旧版本(如4.2),则无法使用c++11功能。


我使用“-v”编译,并发现: gcc版本为4.7.2(GCC) 在构建报告中。 - Joseph Little
1
刚刚使用gcc 4.7.2进行了测试,它绝对可以同时使用“-std=c++11”和“-std=c++0x”。 - Danilo Piazzalunga

8
你正在正确使用 stof。这是MinGW版本的gcc 4.7.2中已知的一个bug。在gcc 4.8中应该已经修复了。有很多关于将字符串转换为数字的例子,这里是其中之一one。你需要自己编写代码以获得所需的异常行为,但这些例子应该能帮助你入门。known bug

啊,那就解释了一切。你知道我还有其他方法可以将字符串转换为浮点数并在它们不兼容时抛出异常吗? - Joseph Little
2
当boost::lexical_cast失败时,会抛出异常。 - Michael Kristofik

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