首頁 >後端開發 >C++ >為什麼我的程式碼拋出'類別'Blowfish'不存在預設建構函數”?

為什麼我的程式碼拋出'類別'Blowfish'不存在預設建構函數”?

Barbara Streisand
Barbara Streisand原創
2024-11-27 18:06:12757瀏覽

Why Does My Code Throw

「Blowfish」類別缺少預設建構子:理解錯誤

出現錯誤「類別「Blowfish」不存在預設建構子」儘管定義了需要BlowfishAlgorithm 的建構函數,但嘗試在不提供任何參數的情況下創建Blowfish類別的實例時

錯誤原因

預設情況下,當類別缺少建構子時,編譯器會產生一個不帶參數的預設建構子。但是,當定義非預設建構函式(即需要參數的建構函式)時,編譯器假定建構函式處理由開發人員明確處理,並且不再自動產生預設建構函式。因此,在建立類別的實例時必須提供參數。

解決方案

要解決此錯誤,您有多種選擇:

  • 新增預設建構子: 為Blowfish 類別定義一個不帶參數的預設建構子。例如:
Blowfish() = default;
  • 提供給建構函參數: 建立 Blowfish 類別的實例時,明確提供所需的參數。例如:
Blowfish blowfish(BlowfishAlgorithm::CBC);
  • 使用指定的初始化語法(C 11 或更高版本): 使用帶有參數並新增= default 子句的建構函數產生預設構造函數。這允許兩個建構函數重載共存。
class GameCryptography {
public:
    GameCryptography(BlofishAlgorithm); // Constructor with argument

    // Generate a default constructor by delegating to the compiler
    GameCryptography() = default;
};

附加說明

值得強調的是,ECB、CBC、CFB 等代表的模式加密演算法的操作而非加密演算法本身。雖然它不影響編譯,但這種語義錯誤可能會讓程式碼讀者感到困惑。

以上是為什麼我的程式碼拋出'類別'Blowfish'不存在預設建構函數”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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