最近由於項目需要,需要使用qt做一套連接資料庫並且實現用戶登錄,註冊的界面,但是做起來卻很費勁,出現了一堆奇怪的編譯錯誤。
1 其他機器上編譯通過,換個機器編譯失敗
很多時候,我們發現代碼的語法是正確的,而在這個機器上編譯也是通過的,但是換一臺機器後,我們發現,編譯竟然沒有通過,這個原因是未知的。
然後會報出來一堆很基礎的錯誤,如mainwindow類不識別了,qstring類找不到了,即使你有頭文件,但是還是報很多的錯誤。
如果是這個錯誤,建議你先使用這個方法:使用vs調試器打開你的代碼,在文件中,找到高級保存選項,將代碼保存為代籤名的,然後保存。
這個時候,在qt下先執行qmake,然後再重新構建,最後看一下是否還有錯誤。如果還是一堆堆的錯誤,那麼繼續把報錯的h文件和cpp文件,採用相同的保存方式。
經過修改,這個是可以達到解決編譯錯誤的修改的。但是如果代碼本身的格式就是代籤名的,還是出錯的話,我們只能在這個機器上重新新建工程,複製粘貼進行實現了。
但是這個情況很少見,除非像我這樣的,公司電腦都是加密的,沒有辦法,如果有代碼拷貝過來,那就一定要重新敲一下了。
2 奇怪的錯誤2詳細展示和解決方法
:-1: error: cannot open output file debug\DemoD.exe: Permission denied
collect2.exe:-1: error: error: ld returned 1 exit status
這個問題的原因就是你在上次調試的時候,exe沒有正確退出,然後導致最後的這個啟動無法啟動,那我們就需要將相關的編譯器關閉,重新打開pro文件即可。
或者ctrl+alt+delete進行後臺任務器的查看,進行相關的程序的關閉即可進行第二次調試和編譯。這個也是我在加密的機器上調試qt中比較尷尬多次遇到的問題。
3 奇怪錯誤3:slot函數有定義但是無法響應
slot函數定義了,但是每次調用都提示無法響應。
具體編譯錯誤如下:QObject::connect: No such slot QDialog::enter_log() in ..\DemoD\enter.cpp:54
首先我們要轉到slot函數看看是否有具體的實現定義,如果有的話還出錯,建議先把這個槽函數取消掉,換個其他的槽函數調用試一下,如果沒有問題的話,可能是自己的槽函數和系統自帶的有衝突吧。這個具體情況具體分析吧。目前我只發現這幾種解決方案了。slot函數無響應不會具體報錯,但是一旦出現這樣的警告,就是一個空槽函數了。
大家在使用slot函數的時候,千萬要注意這個情況,以免出現不必要的bug,穩固基礎知識再去寫程序。