2011-07-14 107 views
10

到目前爲止,我已將所有代碼寫入visual studio,現在我需要添加一些UI,因此我將使用Qt 。所以我添加了每個文件在我的項目中(除了main類),然後嘗試使用Qt編譯它。因爲我已經使用了一些C++ 0x特性的我不得不加入這一行項目文件:Qt Creator編譯錯誤「:: swprintf和:: vswprintf尚未聲明」

QMAKE_CXXFLAGS += -std=c++0x 

然後,我嘗試編譯它。只有兩個錯誤(可能有更多,但在這兩個編譯器停止)

In file included from d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/postypes.h:42, 

       from d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iosfwd:42, 

       from d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ios:39, 

       from d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ostream:40, 

       from ../TranslatorBase/ttObject.h:5, 

       from ../TranslatorBase/ttArray.h:5, 

       from ../TranslatorBase/ttArray.cpp:1: 

d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:159: error: '::swprintf' has not been declared 

d:\qt\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:166: error: '::vswprintf' has not been declared 

我不知道爲什麼應該有這樣的錯誤。並確保我第一次嘗試編譯使用該命令使用的cygwin/gcc的同一個項目:

gcc -std=c++0x TranslatorBase/ttArray.cpp -c -o ttArray.o 

沒有錯誤有它編譯即使沒有任何警告。事實上,我的項目中的每個文件都沒有任何警告地編譯。

我現在正在使用基於Qt V4.7.0 Qt Creator的V2.0.1和它使用的MinGW/GCC V4.4.0

- 編輯 -

只是一個新的東西,我發現,即使沒有我的源文件(只有使用Qt生成的文件)仍然存在編譯錯誤。看來我的gcc有問題。

@Troubadour的Qt生成此命令:

g++ -c -std=c++0x -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I'd:/Qt/qt/include/QtCore' -I'd:/Qt/qt/include/QtGui' -I'd:/Qt/qt/include' -I'd:/Qt/qt/include/ActiveQt' -I'debug' -I'.' -I'../TranslatorUI' -I'.' -I'd:/Qt/qt/mkspecs/win32-g++' -o debug/ttArray.o ../TranslatorBase/ttArray.cpp 
+0

什麼'gcc'生成命令是'qmake'生成? – Troubadour

+0

請注意,[這個問題](http://stackoverflow.com/questions/3445312/swprintf-and-vswprintf-not-declared)討論了同樣的問題,所以它可能有一些用處。這可能是因爲你看到完全一樣的東西,儘管你沒有顯式地使用'-ansi'選項,所以可能不是。 – Troubadour

+0

如果在命令行使用'g ++'而不是'gcc',它仍然可以工作嗎? – Troubadour

回答

10

爲遊吟詩人建議,它與MinGW的一個問題,即當你添加-std =的C++ 0x標誌編譯選項,MinGW的自動添加-ansi標誌所以爲了解決這個問題,我添加了-U__STRICT_ANSI__標誌來編譯選項。問題修復。

+0

這個技巧。感謝Gajet! – Inverse

+0

-std = gnu ++ 0x甚至不需要undefining __STRICT_ANSI__ – rezna

+0

@rezna它取決於,如果你使用unicode類型和你需要的函數(至少在我寫這個答案的時候)。 -ansi將移除對函數和類的支持,如wstring,wprintf,wcout等... – Ali1S232

5

我遇到了同樣的問題。將-std=c++0x更改爲-std=gnu++0x也可解決此問題。