cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员

Posted

技术标签:

【中文标题】cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员【英文标题】:cygwin g++ std::stoi "error: ‘stoi’ is not a member of ‘std 【发布时间】:2013-11-22 12:56:37 【问题描述】:

我有:

-cygwin 1.7.25 on windows 7/32bit

-g++ --version --> g++ (GCC) 4.8.2

-libstdc++.a --> gcc-g++-4.8.2-1

试图制作一个c++ 你好世界:

#include <string>

int main() 

   std::string s = "123";
   int i = std::stoi(s);

编译给出:

$ g++ -std=c++11 main.cpp
main.cpp: In function ‘int main()’:
main.cpp:6:10: error: ‘stoi’ is not a member of ‘std’
  int i = std::stoi(s);

我搜索了几个小时,但仍然找不到解决方案。这里有什么问题?

【问题讨论】:

很奇怪。它应该可以工作...这似乎是一些奇怪的错误。 【参考方案1】:

这是一个错误,可能是某些库代码到 cygwin 的不完整端口(它是 cplusplus11 的一个功能)——毕竟有些东西必须更改。请务必举报。

解决方案当然很简单:#include &lt;cstdlib&gt; strtol(s.c_str(),0,10);

www.cplusplus.com/.../strtol

here也提到了一个类似的 mingw 错误

std::stoi doesn't exist in g++ 4.6.1 on MinGW

【讨论】:

最新稳定版的 Cygwin 也有这个问题,但使用 to_string cygwin v4.9.2 Windows 7/64 仍然没有 stoi,但 strtol 可以完成这项工作【参考方案2】:

我昨天也遇到了同样的问题。 “错误:'stoi' 不是 'std' 的成员。”

首先,我确保启用了 c++11。然后,我将 g++ 编译器更新到最新版本。之后,这个错误就消失了。

【讨论】:

经过测试并在 Debian 上与 G++ 4.9 一起使用。虽然用户需要一个 Windows 解决方案【参考方案3】:

编译器没有被认真对待。在 Windows 上,您最好的选择可能是使用 Visual Studio,因为它始终保持最新。这里的错误是宏定义开始时是错误的。问题从 iomanip.h 和 iosbase 开始。所以他们必须改变所有的代码。有用户为此制作的补丁,但我根本不相信它们,因为它们可能包含比原始副本更多的错误。但这取决于你,我只是坚持使用 Visual Studio Express Edition。

【讨论】:

【参考方案4】:

stoi 仅在 mingw64 上对我有效。 如果您使用 Codeblocks,请不要忘记检查您的项目编译器是否设置为 mingw64。

【讨论】:

以上是关于cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员的主要内容,如果未能解决你的问题,请参考以下文章

std::atoi() 和 std::stoi 有啥区别?

C中的另一个核心转储问题

std::stoi 的基本参数

C++ 困境:关于 std::stoi

std::stoi 的问题,不适用于 MinGW GCC 4.7.2

atoi函数和std::stoi函数的不同点