我正在尝试使用新的 C++0x 功能Qt创建者 http://en.wikipedia.org/wiki/Qt_Creator在 Windows 下(Qt Creator 2.0.1)。
我读了主题在 Qt、Qt Creator 和 QMake 中配置 GCC 编译器开关 https://stackoverflow.com/questions/2987062/configuring-gcc-compiler-switches-in-qt-qtcreator-qmake并添加了QMAKE_CXXFLAGS += -std=c++0x
到 .pro 文件。
之后,Qt Creator 在这个简单的代码上给了我非常奇怪的错误:
#include <memory>
int main()
{
}
编译器错误:
'::swprintf' 尚未声明
'::vswprintf' 尚未声明
我尝试使用命令从命令行编译我的代码g++ test.cpp --std=c++0x
并得到同样的错误。
那么Qt有什么问题呢MinGW http://en.wikipedia.org/wiki/MinGW编译器?是否可以在 Qt Creator 中使用 C++0x 功能?
首先,可能是库头没有正确表示它们的依赖关系。尝试添加一个#include <cstdio>
也许(不幸的是)using namespace std;
到您的文件顶部。
如果做不到这一点,似乎有几个人在使用 MinGW 和 swprintf 时遇到了问题。此邮件列表帖子 http://lists-archives.org/mingw-users/17595-compilation-problem-with-swprintf.html建议添加以下内容:
#ifdef WIN32
#define swprintf _snwprintf
#endif
看看是否可以解决问题。 (您也希望它位于文件的最顶部。)
如果在源代码前添加随机定义对您来说似乎是个坏主意,我建议使用-D
当您在 MinGW 上构建时,构建标志有条件地注入上述定义。
也可以看看这个简短的讨论 http://www.cplusplus.com/forum/general/6612/关于 MinGW 上的 swprintf 与其他编译器之间的差异。
最后,在一切失败的情况下,似乎将问题归因于启用标志的问题__STRICT_ANSI__
在 MinGW 中,并建议注释掉 MinGW 标头之一中的几行来解决该问题。我建议添加一个更简单的#ifndef __STRICT_ANSI__
如果您决定采用此技巧,请绕过它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)