我尝试在IdeOne(使用gcc 4.5.1)和我的Linux计算机(使用类似4.6.4)上编译这个简单的程序:
#include <string>
#include <iostream>
int main() {
std::cout << std::stoi("32") << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它完美地编译并输出32.但是,当我尝试使用MinGW和gcc 4.6.1在我的Windows计算机上编译它时,我收到此错误:
test.cpp: In function 'int main()':
test.cpp:5:19: error: 'stoi' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
同样的事情发生在std::stoul等等.std::stoi由于某种原因,MinGW中不存在和家庭吗?我认为MinGW(sh | w)上的gcc与Linux上的行为相同.
DRH*_*DRH 45
这是vswprintfWindows上非标准声明的结果.GNU标准库_GLIBCXX_HAVE_BROKEN_VSWPRINTF在此平台上定义,它反过来禁用您尝试使用的转换函数.您可以在此处阅读有关此问题和宏的更多信息:http://gcc.gnu.org/bugzilla/show_bug.cgi?id = 37522.
如果您愿意修改随MinGW分发的头文件,您可以通过删除第!defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)2754行的宏.../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h并将其添加回第2905行到第2965行(引用的行std::vswprintf)来解决此问题.您将无法使用这些std::to_wstring功能,但许多其他转换功能应该可用.
这是在MinGW-w64中修复的,MinGW-w64是原始MinGW项目的一个分支,实际上对解决这样的错误感兴趣。自g ++ 4.9.2起可能已修复,甚至更早。
注意:对于来这里的人来说,他们已经完成了CodeBlocks的默认安装(旧的破碎的MinGW随附),并且想要升级编译器,请参见以下答案。
您可以使用任何版本的MinGW-w64:我使用mingw-builds.org中的自安装程序,而该答案使用TDM-GCC-64。如果要同时进行64位和32位编译,则需要安装并添加2个新的编译器:mingw-w64 64位和mingw-w64 32位。它不支持使用带有-m32或-m64切换选项的g ++安装。
| 归档时间: |
|
| 查看次数: |
25066 次 |
| 最近记录: |