オブジェクトの初期化におけるデフォルト コンストラクター エラー
Blowfish クラスで暗号化機能をカプセル化しているときに、GameCryptography のインスタンスを作成しようとしたときにエラーが発生しました。エラー メッセージ「クラス 'Blowfish' にはデフォルトのコンストラクターが存在しません」は、デフォルトのコンストラクターが欠落していることを示します。
クラスにコンストラクターがない場合、通常、コンパイラーは引数のないデフォルトのコンストラクターを生成します。ただし、(この場合のように) デフォルト以外のコンストラクターが定義されている場合、コンパイラはこのデフォルト コンストラクターの生成を控えます。
解決策
エラーを解決するには、 Blowfish のデフォルトのコンストラクターを定義するか、オブジェクトの初期化を変更できます。
1.デフォルト コンストラクターの追加:
次のようなデフォルト コンストラクターを Blowfish クラスに追加します。
Blowfish() {}
このコンストラクターは、アルゴリズムを指定せずにオブジェクトを初期化します。
2.オブジェクトの初期化でのアルゴリズムの指定:
GameCryptography で Blowfish のインスタンスを作成する場合、アルゴリズムを明示的に指定します。例:
GameCryptography::GameCryptography(unsigned char key[]) { _blowfish = Blowfish(CBC); }
3. C 11 のデフォルト メンバー初期化の使用:
C 11 以降では、デフォルト メンバー初期化を使用してメンバーをデフォルト値に自動的に初期化できます。これにより、デフォルト以外のコンストラクタを定義しながら、「デフォルトのような」コンストラクタを使用することができます。
Blowfish(BlowfishAlgorithm algorithm = CBC); GameCryptography::GameCryptography(unsigned char key[]) : _blowfish() {} // Default-initialize _blowfish
用語に関する注意
動作モード (例: ECB、CBC、CFB) 自体は暗号化アルゴリズムではありません。これらをアルゴリズムとして参照すると、混乱が生じる可能性があります。
以上が「クラス「Blowfish」にはデフォルトのコンストラクタが存在しません」が発生する理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。