2011-02-15 111 views
13

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

我阅读了线程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'还没有宣布

我试着编译我的代码fr om命令行命令g++ test.cpp --std=c++0x并得到相同的错误。

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

+1

重复问题:http://stackoverflow.com/questions/4713713/include-iostream-with-std-c0x-is-broken。你所要做的就是在库头文件中注释`using :: swprintf;`和`using :: vswprintf;` - 查看ssmir答案中提到的补丁。 – TonyK 2011-02-15 12:47:37

回答

3

首先,它可能是库头文件不能正确表示它们的依赖关系。尝试添加一个#include <cstdio>,或许(不幸的是)using namespace std;添加到顶部的文件。

如果不这样做,几个人似乎与MinGW和swprintf有问题。 This mailing list post建议加入:

#ifdef WIN32 
#define swprintf _snwprintf 
#endif 

看看是否可以解决问题。 (你也希望它在文件的最顶端)

如果预先随机定义给你的源代码似乎对你来说是一个坏主意,我建议使用-D构建标志来有条件地注入上面的定义,当你建立在MinGW上。

另请参阅this short discussion关于MinGW与其他编译器swprintf之间的区别。

最后,一切都失败了,this link似乎将问题归因于在MinGW中启用__STRICT_ANSI__的标志问题,并建议在MinGW标题之一中注释几行以解决该问题。我建议在他们周围增加一个更简单的#ifndef __STRICT_ANSI__,而不是如果你决定采用这种黑客行为。

+0

我为`:: swprintf'和`:: vswprintf`添加`__STRICT_ANSI__`并将其编译。谢谢 ;) – UmmaGumma 2011-02-15 13:06:54