【问题标题】:Function 'stof' could not be resolved函数“stof”无法解析
【发布时间】:2013-02-15 20:56:15
【问题描述】:

我之前遇到过这个问题,但找到了解决方法,只是这次没有解决方法。

我正在尝试使用 '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 行语义错误

【问题讨论】:

  • std::stof 是 C++11 标准中的新内容。你确定你使用的是兼容 C++11 的编译器吗?
  • 我不确定,我对 C++ 不太熟悉,但我的命令之一是“-std=c++11”
  • 你也可以试试 -stdlib=libc++
  • -stdlib=libc++ Nathan S 运气不好,谢谢
  • 你不是偶然使用 MinGW 的吧?有一个 open bug report 可以解释为什么它不适合你。

标签: c++ c++11 mingw


【解决方案1】:

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

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

如果您使用的是 g++,请检查您使用的是哪个版本 g++ -v - 如果它是旧版本(例如 4.2)c++11 功能将不可用。

【讨论】:

  • 我用“-v”编译发现:gcc version 4.7.2 (GCC)在构建报告中
  • 刚刚用 gcc 4.7.2 测试过,它绝对适用于 -std=c++11-std=c++0x
【解决方案2】:

您正确地使用了stof。这是 gcc 4.7.2 的 MinGW 版本中的 known bug。它应该为 gcc 4.8 修复。 SO上有很多将字符串转换为数字的示例。这是one。您必须自己动手来获得所需的异常行为,但这些示例应该可以帮助您入门。

【讨论】:

  • 啊,那可以解释一切了。您知道我可以将字符串转换为浮点数并在它们不兼容时抛出异常的任何其他方式吗?
  • boost::lexical_cast 失败时抛出异常。
猜你喜欢
  • 2012-07-25
  • 2013-09-20
  • 2012-11-27
  • 2015-05-29
  • 1970-01-01
  • 2015-05-05
  • 2017-02-28
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多