ホームページ >バックエンド開発 >C++ >デフォルト コンストラクターのない埋め込みクラスでクラスをインスタンス化すると、C で「クラスにはデフォルト コンストラクターが存在しません」というメッセージが表示されるのはなぜですか?

デフォルト コンストラクターのない埋め込みクラスでクラスをインスタンス化すると、C で「クラスにはデフォルト コンストラクターが存在しません」というメッセージが表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-10 00:36:16813ブラウズ

Why Does

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

コンストラクター引数を指定せずに GameCryptography クラスのインスタンスをインスタンス化しようとしたとき、Blowfish クラスの既定のコンストラクターが存在しないことを示す IntelliSense エラー メッセージは、

このエラーは、GameCryptography コンストラクターがコンストラクター引数を指定せずに Blowfish の埋め込みインスタンスを初期化しようとするために発生します。デフォルトでは、C はユーザー定義のコンストラクターを使用せずにクラスのコンストラクターを合成します。ただし、クラスにユーザー定義のコンストラクターがある場合、デフォルトのコンストラクターは合成されません。

エラーを解決するには、次のいずれかの方法を実装できます:

  • デフォルト コンストラクターを指定する: アルゴリズム フィールドをデフォルト値で初期化する Blowfish クラスのデフォルト コンストラクターを定義します。例:
Blowfish() : _algorithm(CBC) {}
  • コンストラクター引数の指定: Blowfish クラスのインスタンスを作成するときに、明示的なコンストラクター引数を指定します。
GameCryptography(unsigned char key[]) : _blowfish(CBC) {}
  • C 11 を使用しますデフォルト コンストラクター: C 11 以降では、default キーワードを使用して、ユーザー定義コンストラクターが存在しない場合に自動的に合成されるデフォルト コンストラクターを生成するようにコンパイラーに指示します。
class Blowfish {
public:
    Blowfish(BlowfishAlgorithm algorithm) {}
    Blowfish() = default;
};
    正しい用語:
  • さらに、正しい用語を使用することも検討してください。動作モード (例: ECB、CBC) は、アルゴリズムと総称されるのではなく、そのように呼ばれるべきです。

以上がデフォルト コンストラクターのない埋め込みクラスでクラスをインスタンス化すると、C で「クラスにはデフォルト コンストラクターが存在しません」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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