ホームページ > バックエンド開発 > C++ > 私のコードが「クラス「Blowfish」にはデフォルトのコンストラクターが存在しません」をスローするのはなぜですか?

私のコードが「クラス「Blowfish」にはデフォルトのコンストラクターが存在しません」をスローするのはなぜですか?

Barbara Streisand
リリース: 2024-11-27 18:06:12
オリジナル
828 人が閲覧しました

Why Does My Code Throw

「Blowfish」クラスのデフォルト コンストラクターが見つかりません: エラーの理解

「クラス "Blowfish" にはデフォルト コンストラクターが存在しません」というエラーが発生するを必要とするコンストラクターを定義しているにもかかわらず、引数を指定せずに Blowfish クラスのインスタンスを作成しようとしたとき。 BlowfishAlgorithm 引数。

エラーの理由

デフォルトでは、クラスにコンストラクターがない場合、コンパイラーは引数をとらないデフォルトのコンストラクターを生成します。ただし、デフォルト以外のコンストラクター (引数が必要なコンストラクター) が定義されている場合、コンパイラーはコンストラクターの処理が開発者によって明示的に処理されると想定し、デフォルトのコンストラクターを自動的に生成しなくなります。したがって、クラスのインスタンスを作成するときに引数を指定することが必須になります。

解決策

このエラーを解決するには、いくつかのオプションがあります:

  • デフォルト コンストラクターを追加します: 何も取らない 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 中国語 Web サイトの他の関連記事を参照してください。

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