0

我在“first.h”中声明了我的班级如下:

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

然后在“first.cpp”中,我这样使用它:

MyClass::tmpM ( cv::Mat& _model )
{
    ...
}

然后我将这个“first.h”包含在我的“second.h”中,并将这个“second.h”包含在我的“third.h”中,然后在我的“third.cpp”中我尝试这样做:

cv::Mat testMat ( height, width, CV_8UC3 );
tmpM myM ( testMat );

然后我收到错误消息:

'MyClass::tmpM':不是函数

错误 C2512:“MyClass”:没有合适的默认构造函数可用

IntelliSense:声明与“cv::Mat& MyClass::tmpM”不兼容

IntelliSense:缺少显式类型(假定为“int”)

在你问之前,我不得不说我确实搜索并询问过这个问题,但仍然无法解决。我是一个学习者,所以有人可以帮助我解决这个问题吗?谢谢你。

4

2 回答 2

2

你得到的错误非常明确。

'MyClass::tmpM': not a function

意味着这tmpM不是一个函数,它来自声明

MyClass::tmpM ( cv::Mat& _model ) {
    ...
}

我认为您很困惑并想声明构造函数,在这种情况下您应该在头文件中编写(我添加了默认构造函数)

class MyClass {
public:
    MyClass ( cv::Mat& _model );
private:
    MyClass(); // Private default constructor
    cv::Mat& tmpM;
}

然后在你的 cpp 文件中

MyClass::MyClass( cv::Mat& _model ) {
    // Do things
}

这将解决您的第二条错误消息:

error C2512: 'MyClass': no appropriate default constructor available

您的第三个文件也有问题,因为在行

tmpM myM ( testMat );

tmpM不是类型。我想你的意思是

MyClass myM( testMat );

这就是最后两个错误告诉你的。

于 2012-10-21T12:09:04.840 回答
1

您声明了这一点:

cv::Mat& tmpM;

并因此重新声明:

MyClass::tmpM ( cv::Mat& _model )

首先,您声明对象。在第二个中,您声明了一个函数。

修复一个或另一个,以便它们匹配。

于 2012-10-21T12:08:39.693 回答