【问题标题】:C++0x with Qt CreatorC++0x 与 Qt Creator
【发布时间】:2011-06-27 13:47:57
【问题描述】:

我正在尝试在 Windows (Qt Creator 2.0.1) 下使用 Qt Creator 中的新 C++0x 功能。

我阅读了主题 Configuring the GCC compiler switches in Qt, Qt Creator, and QMake 并将QMAKE_CXXFLAGS += -std=c++0x 添加到 .pro 文件中。

Qt Creator 在这个简单的代码上给了我非常奇怪的错误:

#include <memory>

int main()
{
}

编译器错误:

'::swprintf' 尚未声明

'::vswprintf' 尚未声明

我尝试使用命令g++ test.cpp --std=c++0x 从命令行编译我的代码并得到同样的错误。

那么 Qt MinGW 编译器有什么问题? Qt Creator 中是否可以使用 C++0x 功能?

【问题讨论】:

  • 重复问题:stackoverflow.com/questions/4713713/…。您所要做的就是在库头文件中注释掉 using ::swprintf;using ::vswprintf; - 请参阅 ssmir 的答案中提到的补丁。

标签: c++ qt c++11 mingw qt-creator


【解决方案1】:

首先,可能是库头不能正确表示它们的依赖关系。尝试在顶部的文件中添加#include &lt;cstdio&gt; 和可能(不幸的是)using namespace std;

否则,似乎有几个人对 MinGW 和 swprintf 有问题。 This mailing list post 建议添加:

#ifdef WIN32
#define swprintf _snwprintf
#endif

看看这是否能解决问题。 (您也希望它位于文件的最顶部。)

如果在您的源代码中添加随机定义对您来说是个坏主意,我建议您在 MinGW 上构建时使用-D 构建标志有条件地注入上述定义。

另请参阅 this short discussion,了解 MinGW 上的 swprintf 与其他编译器之间的差异。

最后,在所有其他方面都失败了,this link 似乎将问题归因于在 MinGW 中启用 __STRICT_ANSI__ 的标志的问题,并建议在其中一个 MinGW 标头中注释掉几行以解决该问题。如果您决定使用此 hack,我建议您在它们周围添加一个更简单的 #ifndef __STRICT_ANSI__

【讨论】:

  • 我为 '::swprintf' 和 ::vswprintf 添加了 __STRICT_ANSI__ 并编译了它。谢谢;)
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多