2011-07-14 28 views
10

Cho đến nay tôi đã viết tất cả mã của mình trong studio trực quan và giờ tôi cần thêm một số giao diện người dùng vào nó để tôi sẽ sử dụng Qt . Vì vậy, tôi đã thêm tất cả các tập tin Trong dự án của tôi (ngoại trừ lớp chính) và sau đó cố gắng biên dịch nó bằng cách sử dụng Qt. vì tôi đã sử dụng một số tính năng C++ 0x, tôi phải thêm dòng này vào tệp dự án:Lỗi biên dịch của người tạo Qt ":: swprintf và :: vswprintf chưa được khai báo"

QMAKE_CXXFLAGS += -std=c++0x 

thì tôi đã thử biên dịch nó. chỉ có hai lỗi (có thể có nhiều hơn nhưng trình biên dịch dừng lại ở hai trường hợp này)

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 

Tôi không biết tại sao có lỗi như vậy. và để đảm bảo lần đầu tiên tôi đã cố gắng để biên dịch cùng một dự án sử dụng Cygwin/gcc sử dụng lệnh này:

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

không có lỗi đó nó biên dịch thậm chí không có bất kỳ cảnh báo. Trong thực tế, tất cả các tập tin trong dự án của tôi biên dịch mà không có bất kỳ cảnh báo ở đó.

bây giờ tôi đang sử dụng Qt Creator v2.0.1 dựa trên Qt v4.7.0 và nó sử dụng mingw/gcc v4.4.0

--edit--

chỉ là một điều mới mà tôi đã tìm thấy , ngay cả khi không có tệp nguồn của tôi (chỉ với các tệp được tạo bởi Qt) vẫn còn lỗi biên dịch. có vẻ như có vấn đề với gcc mà tôi có.

@Troubadour Qt tạo lệnh này:

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

Lệnh 'gcc' build' tạo' qmake' là gì? – Troubadour

+0

Lưu ý rằng [câu hỏi này] (http://stackoverflow.com/questions/3445312/swprintf-and-vswprintf-not-declared) thảo luận về cùng một vấn đề để nó có thể được sử dụng một số. Nó có thể là bạn đang nhìn thấy chính xác điều tương tự mặc dù bạn không rõ ràng có tùy chọn '-ansi' vì vậy có lẽ không. – Troubadour

+0

Nếu bạn sử dụng 'g ++' tại dòng lệnh thay vì' gcc' thì nó vẫn hoạt động? – Troubadour

Trả lời

10

như Troubadour đề nghị, đó là một vấn đề với mingw, rằng khi bạn thêm -std = C++ 0x cờ để biên dịch tùy chọn, mingw tự động thêm cờ -ansi vì vậy, để khắc phục điều đó, tôi đã thêm cờ -U__STRICT_ANSI__ để biên dịch các tùy chọn. vấn đề đã được khắc phục.

+0

Điều đó đã xảy ra. Cảm ơn Gajet! – Inverse

+0

-std = gnu ++ 0x thậm chí không yêu cầu undefining __STRICT_ANSI__ – rezna

+0

@rezna nó phụ thuộc, nếu bạn đang sử dụng các loại unicode và chức năng bạn cần (ít nhất là khi tôi viết câu trả lời này). -ansi sẽ xóa hỗ trợ cho các chức năng và các lớp như wstring, wprintf, wcout và cứ thế ... – Ali1S232

5

Tôi đã gặp sự cố tương tự. Thay đổi -std=c++0x thành -std=gnu++0x cũng khắc phục.

Các vấn đề liên quan