2011-07-14 9 views
10

Hasta ahora he escrito todo mi código en Visual Studio y ahora necesito agregarle una IU así que voy a usar Qt . Así que agregué cada archivo en mi proyecto (excepto la clase principal) y luego intenté compilarlo usando Qt. ya que he utilizado algunas características de C++ 0x he tenido que añadir esta línea al archivo de proyecto:Error de compilación de Qt Creator ":: swprintf y :: vswprintf no se ha declarado"

QMAKE_CXXFLAGS += -std=c++0x 

Luego probé la compilación. sólo hay dos errores (puede haber más, pero el compilador se detiene en estos dos)

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 

no tengo idea de por qué debería haber un error de este tipo. y para asegurarse primera vez que trató de compilar mismo proyecto usando cygwin/gcc usando este comando:

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

no hay error no se compila incluso sin ninguna advertencia. De hecho, todos los archivos de mi proyecto compilan sin advertencias allí.

Ahora estoy usando Qt Creator v2.0.1 basado en Qt v4.7.0 y se está utilizando MinGW/gcc v4.4.0

--edit--

sólo una nueva cosa que he encontrado , incluso sin mis archivos fuente (solo con archivos generados Qt) todavía hay un error de compilación. parece que hay un problema con el gcc que tengo.

@Troubadour Qt genera este comando:

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

¿Qué comando de compilación 'gcc' está generando' qmake'? – Troubadour

+0

Tenga en cuenta que [esta pregunta] (http://stackoverflow.com/questions/3445312/swprintf-and-vswprintf-not-declared) analiza el mismo problema por lo que puede ser de alguna utilidad. Puede ser que esté viendo exactamente lo mismo, aunque no tenga explícitamente la opción '-ansi', entonces tal vez no. – Troubadour

+0

Si usa 'g ++' en la línea de comando en lugar de 'gcc', ¿sigue funcionando? – Troubadour

Respuesta

10

como se sugiere Trovador, que es un problema con MinGW, que cuando se agrega -std = C++ 0x bandera a opciones de compilación, MinGW añade automáticamente bandera -ansi también, así que para arreglar eso agregué -U__STRICT_ANSI__ bandera para compilar las opciones. problema fijo.

+0

Eso hizo el truco. Gracias Gajet! – Inverse

+0

-std = gnu ++ 0x ni siquiera requiere la indefinición __STRICT_ANSI__ – rezna

+0

@rezna depende, si está utilizando tipos y funciones de Unicode que necesita (al menos cuando estaba escribiendo esta respuesta). -ansi eliminará soporte para funciones y clases como wstring, wprintf, wcout y así sucesivamente ... – Ali1S232

5

He encontrado el mismo problema. Cambiando -std=c++0x a -std=gnu++0x también arreglarlo.

Cuestiones relacionadas