ホームページ >バックエンド開発 >C++ >引数を指定せずに Blowfish オブジェクトをインスタンス化すると「デフォルト コンストラクターがありません」というエラーが発生するのはなぜですか?これはどのように修正すればよいですか?

引数を指定せずに Blowfish オブジェクトをインスタンス化すると「デフォルト コンストラクターがありません」というエラーが発生するのはなぜですか?これはどのように修正すればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-27 06:40:13206ブラウズ

Why Does Instantiating a Blowfish Object Without Arguments Produce a

エラー: 「クラス "Blowfish" にはデフォルトのコンストラクターが存在しません」

質問:

コンストラクター引数を明示的に指定せずに Blowfish クラスのオブジェクトをインスタンス化しようとすると、コンパイラは、「クラス "Blowfish" にはデフォルトのコンストラクターが存在しません。」というエラー メッセージを出力します。これはなぜ発生しますか?また、どうすれば解決できますか?

答え:

Blowfish クラスにデフォルトのコンストラクターが存在しないのは仕様です。クラスで単一のコンストラクターが定義されている場合でも、コンパイラーはデフォルトでデフォルトのコンストラクターを合成しなくなりました。

解決策:

このエラーを解決するには、次のオプションがあります。 :

  1. デフォルトを指定しますconstructor: 引数を必要としないデフォルトのコンストラクターを定義します。例:
Blowfish() : _algorithm(CBC) {}
  1. オブジェクトをインスタンス化するときに引数を指定します: Blowfish クラスのオブジェクトを作成するときに、必要な BlowfishAlgorithm 値を明示的に指定します。例:
Blowfish blowfish(ECB);
  1. Use C 11's =default: 引数を取るコンストラクターを定義しますが、引数が持つコンストラクターを生成するようにコンパイラーに指示します。定義していない場合は作成されます。これは = デフォルト構文を使用して行われます。例:
class GameCryptography {
public:
    GameCryptography(BlofishAlgorithm);

    // Generate the default constructor
    GameCryptography() = default;
};

追加メモ:

「ECB」、「CBC」、「CFB」などの用語は、暗号化アルゴリズム自体ではなく、暗号化アルゴリズムの動作モード。これらの用語をアルゴリズム名として使用すると、誤解や誤りが生じる可能性があります。

以上が引数を指定せずに Blowfish オブジェクトをインスタンス化すると「デフォルト コンストラクターがありません」というエラーが発生するのはなぜですか?これはどのように修正すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。