C2512错误:没有适当的默认构造函数可用

c2512 error: no appropriate default constructor available

本文关键字:默认 构造函数 错误 C2512      更新时间:2023-10-16

我遇到了" C2512"错误,即使我声明了构造函数。我的代码是这样的:在我的" first.h"文件中,我声明了它:

class myClass
{
public:
    tmpM ( cv::Mat& _model );
}

然后在我的" first.cpp"中我做到了:

#include "first.h"
myClass::tmpM ( cv::Mat& _model )
{
    ...
}

然后,我在我的" second.h"中加入了此" first.h",然后在我的"第三h"中加入了此" second.h",然后在我的" thixt.cpp"中称此类为:

cv::Mat myMat ( height, width, CV_8UC3 );
tmpM aM ( myMat );

但这给出了C2512错误,说

没有适当的默认构造函数可用

我确实对此进行了搜索,发现我应该自己构建一个默认的构造函数,我试图在我的" first.h"中这样做:

class myClass
{
public:
    tmpM ( cv::Mat& _model) {};
}

然后有一个错误说:

功能" myclass :: tmpm"已经有一个身体

我尝试了其他几种方法,但仍然无法解决。我认为我不需要在这里构建默认的构造函数,但仍然对此感到困扰。有人可以帮我吗?

编辑

好,在您的建议之后,我将其更改为以下形式:

class myClass
{
public:
myClass(cv::Mat& _model ) : tmpM (_model)
{
}
private:
cv::Mat& tmpM;
};

然后在我的" first.cpp"中,我有一个错误说

声明不兼容

如何解决?

这里的问题似乎是您命名了您的班级以外的其他内容。他们必须有相同的名字。另外,我认为您希望对您传递的模型进行引用,以由对象持有。如果要将其保存为参考,则必须在构造函数初始化列表中初始化。

您想要:

class myClass
{
public:
    myClass(cv::Mat& _model ) : tmpM (_model)
    {
    }
private:
    cv::Mat& tmpM;
};

应该是:

class myClass
{
public:
    myClass(cv::Mat& _model ) : tmpM (_model)
    {
    }
};

您的版本声明一个函数(嗯,尝试,因为它是无效的语法 - 丢失的返回类型)称为 tmpM,它不初始化成员。

您必须像上面这样做,因为该类型的成员没有默认的构造函数,因此您必须在构造函数的初始化列表中初始化它。

默认构造函数是

class myClass {
public:
  myClass();
}