首页 >后端开发 >C++ >为什么在 C 中实例化带有缺少默认构造函数的嵌入类的类时会出现'类不存在默认构造函数”?

为什么在 C 中实例化带有缺少默认构造函数的嵌入类的类时会出现'类不存在默认构造函数”?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-10 00:36:16816浏览

Why Does

“类不存在默认构造函数”C 错误

尝试在不提供构造函数参数的情况下实例化 GameCryptography 类的实例时,出现 IntelliSense 错误消息,指示 Blowfish 类不存在默认构造函数。

出现此错误因为 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn