首頁 >後端開發 >C++ >為什麼在 C 中實例化帶有缺少預設建構子的嵌入類別的類別時會出現「類別不存在預設建構子」?

為什麼在 C 中實例化帶有缺少預設建構子的嵌入類別的類別時會出現「類別不存在預設建構子」?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-10 00:36:16816瀏覽

Why Does

「類別不存在預設建構子」C 錯誤

嘗試在不提供建構子參數的情況下實例化GameCryptography 類別的實例時,出現IntelliSense 錯誤訊息,指示Blowfish 類別不存在預設建構子。

出現此錯誤因為 GameCryptography 建構子嘗試在不提供建構子參數的情況下初始化 Blowfish 的嵌入實例。預設情況下,C 為類別合成一個建構函數,而沒有使用者定義的建構函數。但是,如果類別確實有使用者定義的建構函數,則不會合成預設建構函數。

要解決該錯誤,可以實作下列策略之一:

  • 提供預設建構子: 為 Blowfish類別定義一個預設建構函數,以預設值初始化演算法字段,例如如:
Blowfish() : _algorithm(CBC) {}
  • 提供建構函數參數: 在建立Blowfish 類別的實例時提供明確建構子參數,例如:
GameCryptography(unsigned char key[]) : _blowfish(CBC) {}
  • 使用C 11 預設值建構函數: 在C 11 或更高版本中,使用default 關鍵字指示編譯器產生預設建構函數,如果不存在使用者定義的建構函數,此預設建構函數將自動合成,例如:
class Blowfish {
public:
    Blowfish(BlowfishAlgorithm algorithm) {}
    Blowfish() = default;
};
  • 正確術語:此外,請考慮使用正確的術語。操作模式(例如 ECB、CBC)應該這樣稱呼,而不是統稱為演算法。

以上是為什麼在 C 中實例化帶有缺少預設建構子的嵌入類別的類別時會出現「類別不存在預設建構子」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn