ホームページ > バックエンド開発 > C++ > 「クラス「Blowfish」にはデフォルトのコンストラクタが存在しません」が発生する理由とその修正方法

「クラス「Blowfish」にはデフォルトのコンストラクタが存在しません」が発生する理由とその修正方法

Barbara Streisand
リリース: 2024-11-28 16:22:12
オリジナル
1048 人が閲覧しました

Why Does

オブジェクトの初期化におけるデフォルト コンストラクター エラー

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート