2011-02-15 137 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