Share via


編譯器錯誤 C2558

'identifier' : 沒有可用的複製建構函式或是複製建構函式宣告為 'explicit'

複製建構函式 (Copy Constructor) 從另一個相同型別的物件上初始化物件 (它產生一個物件的複本)。 如果您未定義任何建構函式,則編譯器會產生一個預設複製建構函式。

若要修正,請檢查下列可能原因

  1. 嘗試複製一個其複製建構函式是 private 的類別。 在大部分的情況,不應複製具有 private 複製建構函式的類別。 一般程式設計技術會宣告一個 private 複製建構函式,來防止直接使用類別。 該類別單獨使用可能毫無用處,或需要另一個類別才能正常運作。

  2. 嘗試複製其複製建構函式是 explicit 的類別。 使用 explicit 宣告複製建構函式,可防止將類別的物件傳遞至函式,或將類別的物件從函式傳回。

若要採用下列可能解決方式以進行修正

  • 如果您判斷使用具有 private 複製建構函式的類別是安全的,則從具有 private 建構函式的類別上衍生新的類別,並在新類別中提供 public 或 protected 複製建構函式使用。 使用這個衍生類別取代原本的。