使用MinGW实现C++11功能

13

我试图在unordered_map中使用emplace()函数,但编译器显示不存在该函数。

我添加了-std=c+11选项, 但它提示说“cc1plus.exe:错误:无法识别的命令行选项'-std=c+11'”

我是否可以在mingw中使用C++11功能呢?


9
请使用c++11而不是c+11 - Andy Prowl
“class std::unordered_map<std::basic_string<char>, dictionaryWord>”没有名为“emplace”的成员。Emplace是在C++11中定义的。因此,我需要添加C++11支持,但当我这样做时,它会显示:无法识别的命令行选项“-std=c+11”。 - pdrak
好的,只需看一下“-std=c+11”。这里只有一个加号字符。 - milleniumbug
2
你的MinGW版本是多少?(你可以用 gcc -v 来检查)std=c++11 是相对较新引入的。 - milleniumbug
2
@PetrosDrakoulis:那可能是因为你的版本不支持。MinGW现在已经更新到4.7.2版了。 - Nicol Bolas
显示剩余4条评论
1个回答

14

来自GCC文档

C++0x是新的ISO C++标准的工作名称,后来在2011年发布为C++11,并将许多新功能引入标准C++语言和库。该项目旨在在GCC中实现新的C++11功能,并使其成为最早将C++11带给C++程序员的编译器之一。

C++11功能作为“主线”GCC编译器的一部分可以在GCC的Subversion存储库的主干和GCC 4.3及更高版本中使用。要启用C++0x支持,请在g ++命令行上添加命令行参数-std = c++0x 。或者,要除了C++0x扩展之外还启用GNU扩展,请在g++命令行上添加-std = gnu ++0x。 GCC 4.7及更高版本也支持-std=c++11和-std=gnu++11。

因此,对于gcc 4.3到4.6,请使用-std=c++0x,对于更新版本,请使用-std=c++11。 gcc 4.8中添加了对map::emplace库的支持。


相同的错误:'class std :: unordered_map <std :: basic_string <char>,dictionaryWord>'没有名为'emplace'的成员。 - pdrak
我开始相信我不能在4.6中使用C++11,或者至少不能使用全部的C++11。 - pdrak
1
你需要gcc 4.8来使用map::emplace,参考例如这个问题 - TemplateRex
我尝试为Windows编译的项目是一个月前在Linux Gcc 4.7.2中制作的。在Linux Gcc 4.7.2中有emplace()函数。 - pdrak
@PetrosDrakoulis 这很令人惊讶,因为gcc 4.7.2文档中说emplacemap中是缺失的。另请参见http://ideone.com/dqScM9 安装MinGW 4.8是一个安全的选择,例如从http://nuwen.net/mingw.html安装。 - TemplateRex
谢谢。我会尝试这样做。但我保证在Linux gcc 4.7.2中,使用标志-std=c+11,unordered_map有emplace()函数。两周前我参加了一个比赛,使用的编译器是4.7.2,我用了它。这正是我尝试为Windows重新编译的程序... - pdrak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接