【问题标题】:C++ compiler complaining about no default constructorC++ 编译器抱怨没有默认构造函数
【发布时间】:2020-08-29 01:27:55
【问题描述】:

给定这个带有私有状态变量的结构:

struct Calibrate
{
private:
    Stitcher stitcher_obj_;

}

这是拼接器对象(构造函数为空):

Stitcher::Stitcher(const std::vector<cv::Mat> &src_images){}

当调用Calibrate 时,我收到此错误:

default constructor of 'Calibrate' is implicitly deleted because field 'stitcher_obj_' has no default constructor
Stitcher stitcher_obj_
         ^

感谢您提供有关如何解决此问题的任何建议!

【问题讨论】:

  • Stitcher提供一个默认构造函数。
  • @cigien 我确实有 Stitcher 的构造函数,我对措辞感到困惑?
  • 默认构造函数是不接受任何参数的构造函数,而不是“空构造函数”(将您的描述用于具有不执行任何操作的主体的构造函数)。通过提供接受参数的构造函数,您要求编译器默认不生成默认构造函数。如果您需要默认构造函数,则需要定义一个或强制编译器定义一个(例如,从 C++11 开始,在 Stitcher 中有一个 Stitcher() = default)。

标签: c++ oop object constructor


【解决方案1】:

一旦您为类提供了自定义构造函数,就不再合成默认构造函数(0 参数构造函数)。您需要手动恢复它,如下所示:

class Stitcher {
  Stitcher() = default;
  // ...
};

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2011-09-06
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2018-03-09
    相关资源
    最近更新 更多