C++Error2208:...嘗試引用已刪除的函數


C++Error2208:…嘗試引用已刪除的函數
在使用自己編寫的類實例化c++stl容器vector時,調用了vector.erase()方法,結果編譯器報了以下錯誤

錯誤 C2280 “(類名)::operator =(const (類名) &)”: 嘗試引用已刪除的函數 

從錯誤的內容看,似乎是自己的類的賦值構造函數被嘗試調用卻發現其已被刪除。

在翻閱了資料后發現,erase方法會在將對象刪除后,將所有該對象之后的對象向前移動。此時會調用該對象的賦值構造函數。

一般而言,對象的賦值構造函數如果開發者沒有提供,則編譯器會生成默認的賦值構造函數。然而,默認的賦值構造函數在以下幾種情況會被刪除。

該類含有非靜態的const成員變量
該類含有非靜態的reference成員變量
該類含有不能被拷貝的成員變量
該類含有不能被拷貝的基類
該類含有用戶定義的移動構造函數或者移動賦值函數
自己編寫的類中有const成員變量, 將其改成static 或者去掉const 或者添加賦值構造函數,就可以消除這個error.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM