我在“first.h”中宣布我的课程如下:
class MyClass
{
public:
MyClass ( cv::Mat& _model ) : tmpM ( _model )
{
};
private:
cv::Mat& tmpM;
}
然后在“first.cpp”中,我这样使用它:
MyClass::tmpM ( cv::Mat& _model )
{
...
}
然后我在“second.h”中包含了这个“first.h”,并在我的“third.h”中包含了这个“second.h”,然后在我的“third.cpp”中我尝试这样做:
cv::Mat testMat ( height, width, CV_8UC3 );
tmpM myM ( testMat );
然后我说错误了:
'MyClass :: tmpM':不是函数
错误C2512:'MyClass':没有合适的默认构造函数
IntelliSense:声明与“cv :: Mat& MyClass :: tmpM”
不兼容IntelliSense:缺少显式类型(假设为“int”)
在你问之前,我不得不说我确实在搜索并询问了这一点,但仍然无法解决。我是学习者,所以有人可以帮我解决这个问题吗?谢谢。
答案 0 :(得分: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 );
这就是最后两个错误告诉你的事情。
答案 1 :(得分:1)
你声明了这个:
cv::Mat& tmpM;
并重新宣布:
MyClass::tmpM ( cv::Mat& _model )
首先,你在对象上声明。在第二个你声明一个函数。
修复一个或另一个以使它们匹配。