3

即使我声明了构造函数,我也遇到了“c2512”错误。我的代码是这样的:在我的“first.h”文件中,我将其声明为:

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

然后在我的“first.cpp”中我做了:

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

然后我将这个“first.h”包含在我的“second.h”中,然后将这个“second.h”包含在我的“third.h”中,并在我的“third.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”中,我收到一条错误消息

声明不兼容

这怎么可能解决?

4

3 回答 3

4

这里的问题似乎是您将类命名为不同于您命名构造函数的名称。它们必须具有相同的名称。另外,我假设您希望对您传入的模型的引用由对象持有。如果要将其保留为引用,则必须在构造函数初始化程序列表中对其进行初始化。

你要:

class myClass
{
public:
    myClass(cv::Mat& _model ) : tmpM (_model)
    {
    }
private:
    cv::Mat& tmpM;
};
于 2012-10-20T14:25:05.473 回答
3

它应该是:

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

您的版本声明了一个名为 的函数(好吧,尝试这样做,因为它是无效的语法 - 缺少返回类型)tmpM,它不会初始化成员。

你必须按上面那样做,因为该类型的成员没有默认构造函数,所以你必须在构造函数的初始化列表中对其进行初始化。

于 2012-10-20T14:24:51.750 回答
0

默认构造函数是

class myClass {
public:
  myClass();
}
于 2012-10-20T14:25:52.897 回答