【问题标题】:Does libstdc++ not implement std::stoi?libstdc++ 没有实现 std::stoi 吗?
【发布时间】:2012-11-07 08:56:49
【问题描述】:

我想使用std::stoi。虽然我可以使用::atoi(str.c_str()),但如果这可行的话,它会使代码更清晰。但 Eclipse 告诉我:

函数“stoi”无法解析

我查过了

  • 包含标题<string>
  • 包含路径设置正确,因为我可以使用std::string
  • 编译器标志-std=c++0x -std=c++11 也已设置。

gcc 中缺少stoi(),还是我的错?

我正在使用 gcc (Debian 4.7.2-4) 4.7.2。

【问题讨论】:

  • 如果有的话,它会从 libstdc++ 中丢失,而不是 GCC...
  • 编译器标志不是-std=c++0x吗?
  • 是的,刚刚检查过了。两者都设置好了。
  • 你应该只有-std=c++11。无法想象这会导致这个错误。 (另外,只是为了确认一下,您要么使用std::stoi 要么拉入std 命名空间?)等等……它会编译吗?就像 Nikos C. 下面所说的那样,它可能只是 Eclipse 抱怨。
  • @DevNoob:这与 gcc 无关。请重命名问题。

标签: c++ gcc c++11 std


【解决方案1】:

您使用的是 GCC 4.7.2,因此支持 std::stoi。您可以忽略 Eclipse 警告。它应该编译并运行良好。问题出在 Eclipse 编辑器上,而不是 GCC。

(您只需要 -std=c++11-std=gnu++11 [获得 GCC 扩展] 标志,顺便说一句。-std=c++0x 只是一个已弃用的同义词。)

【讨论】:

  • c++11gnu++11 不同。
  • @SergeyK。我知道。但两者都启用了 C++-11 支持。
  • 好吧,没错。它编译。我可以以某种方式对这些 Eclipse 错误做点什么吗?
  • +1 哈,不错。在把 Eclipse 的愚蠢抱怨看得太严重之前尝试编译它。
【解决方案2】:

你可以去掉eclipse中的红色曲线,(来自here):

Project Properties->C/C++ General->Preprocessor Include Paths, Macros->[Providers] tab->your Built-in Compiler Settings provider(依赖于工具链)。 单击“工作区设置”链接,进入“设置”属性页面,再次选择 [发现] 选项卡和您的提供商。有“获取编译器规格的命令”,在其中添加“-std=c++11”。

点击应用并关闭所有内容,然后索引->重建,你应该一切准备就绪。

或者,如果您的 eclipse 版本较旧,您可能只需要这样做:

Project->Properties->C/C++ Build->Discovery Options->GCC C++ Compiler

并将“-std=c++11”标志添加到那里的调用参数中。不过,这已“弃用”,因此您可能需要考虑更新 Eclipse,因为您也在更新您的编译器。

【讨论】:

  • 我在 eclipse 常见问题解答中读到了这个,但问题是它没有设置为永久。它什么也没改变,重新打开项目设置后,标志消失了。
  • 它为我永久修复了它。您可能必须关闭 Eclipse 并重新打开?
  • 该死的。好吧,它是永久的。但是__GXX_EXPERIMENTAL_CXX0X__ 解决了stoi 的问题。但会引发vector.insert 问题。但你的方式并不能解决stoi 问题。太可怕了。
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 2013-06-05
  • 2013-01-22
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 2022-06-16
相关资源
最近更新 更多