带有 `-std=c++0x` 的 `#include <iostream>` 已损坏

Posted

技术标签:

【中文标题】带有 `-std=c++0x` 的 `#include <iostream>` 已损坏【英文标题】:`#include <iostream>` with `-std=c++0x` is broken 【发布时间】:2011-01-17 13:33:38 【问题描述】:

如果我将-std=c++0x 指定给g++,那么我不能#include &lt;iostream&gt;。我收到以下错误消息(mingw 下的 g++ 4.4.0):

In file included from c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/postypes.h:42,
                 from c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iosfwd:42,
                 from c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ios:39,
                 from c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ostream:40,
                 from c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iostream:40,
                 from f.cpp:1:
c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:159: error: '::swprintf' has not been declared
c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:166: error: '::vswprintf' has not been declared

任何想法为什么?这在最新的 g++ 中是否已修复? (如果是这样,有人知道如何将最新的 g++ 合并到 Qt 中吗?)

【问题讨论】:

如果您删除 '-std=c++0x',编译器会告诉您什么? 这看起来像是 MinGW 的 C++ 库/头文件中的错误,而不是 G++ 中的错误。 @Simone:没有-std=c++0x,我没有问题。 看看是否适用:***.com/questions/3445312/… 【参考方案1】:

好像是bug。有一个带有简单补丁的thread(最后)。

【讨论】:

谢谢!那行得通。 (您可能想在答案中将“路径”编辑为“补丁”。)【参考方案2】:
if win32
    QMAKE_CXXFLAGS += -std=gnu++0x

else 
    QMAKE_CXXFLAGS += -std=c++0x

【讨论】:

以上是关于带有 `-std=c++0x` 的 `#include <iostream>` 已损坏的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 C++0x 中对 std::shared_ptr 的向量执行 std::copy?

c++11 统一初始化不适用于“g++ -std=c++0x”

如何在eclipse makefile项目的编译器选项中设置-std=c++0x?

c++0x中wchar_t的命运如何?

错误与否? Visual Studio 2013 预览 std::vector 初始化列表与 std::string

如何让 C++0x / C++11 风格的基于范围的 for 循环与 clang 一起使用?