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

Posted

技术标签:

【中文标题】std::stoi 的问题,不适用于 MinGW GCC 4.7.2【英文标题】:Problems with std::stoi, not working on MinGW GCC 4.7.2 【发布时间】:2013-04-21 14:27:18 【问题描述】:
#include <iostream>
#include <string>

int main()

    std::string test = "45";
    int myint = stoi(test);
    std::cout << myint << '\n';

我在运行 MinGW GCC 4.7.2 的计算机上尝试了此代码。它给了我这个错误:

我做错了什么,我从cppreference 得到这个。它的代码完全相同。它与here 描述的错误不同。

【问题讨论】:

同样的错误。看起来不同但情况相同。 MinGW 问题。 我有这个。我个人不得不进去手动注释掉一个 PP 条件,然后它对非 wstrings 工作正常。 @chris 你能解释一下你必须注释掉的内容吗? @orian,我强烈建议答案中的补丁。它工作得更好,而且更安全、更容易。 【参考方案1】:

看来你的 MinGW 需要一个补丁:Enabling string conversion functions in MinGW

此补丁启用以下 C++11 函数和模板列表 在 std 命名空间中:

stoi, stol, stoul, 斯托尔, stof, stod, stold, to_string, to_wstring

在上面的链接中,有一个.zip文件,下载它并

从 zip 文件的包含目录中复制 wchar.h 和 stdio.h 到以下目录(覆盖):C:\mingw\include(替换 C:\mingw\ 与相应的目录) 将 os_defines.h 复制到以下目录(覆盖): C:\mingw\lib\gcc\mingw32\4.7.0\include\c++\mingw32\bits(替换 C:\mingw\ 使用适当的目录)(将 4.7.0 替换为 正确的版本号)

【讨论】:

人们应该注意,在 MinGW GCC 4.7 之后的版本上不能保证直接替换文件是安全的 - 使用 pastebin sn-ps,打开文件,然后评论/添加到现有文件。这样应用,这在 MinGW GCC 4.8.1 afaik 上仍然可以正常工作【参考方案2】:

另一种解决方案是使用MinGW-w64,它开箱即可正常工作。这是 MinGW 的一个分支,可以生成 32 位和 64 位版本。

【讨论】:

以上是关于std::stoi 的问题,不适用于 MinGW GCC 4.7.2的主要内容,如果未能解决你的问题,请参考以下文章

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

std::stoi 的基本参数

VSCode/MinGW 智能感知不适用于 C++

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

C++ std::stoi 异常:无效参数

在 std::stoi 比较字节 0x90 上发现错误