C++中無法引用“XXX”的默認構造函數 --它是已刪除的函數 造成原因及解決辦法
今年3月,我在中國科學院沈陽計算技術研究所實習時,老師給我留了一個練習項目,在項目中需要把數據庫的增刪改查打包成dll動態鏈接庫,我的思路是寫一個接口類在頭文件中,派生類及重寫函數在cpp文件中,但是在寫的過程中遇到了從未見過的報錯:無法引用“IInterface”的默認構造函數 --它是已刪除的函數。如下圖所示
同時編譯器下方顯示 error C:2280 嘗試引用已刪除的函數
我當時想默認構造函數被刪除,我決定給構造函數加一個參數,來達到重載構造函數的目的,結果還是報一樣的錯。
最后才得知一般出現這種問題是構造函數無法初始化所有成員變量的原因,本類或者繼承鏈上有復雜的數據變量,而QApplication就屬於繼承鏈上的復雜結構,我在接口中繼承了QApplication導致了本次錯誤。
刪除該繼承類問題就解決了,可以正常生成lib及dll文件