我在“first.h.h”中宣布我的班级如下:
class MyClass
{
public:
MyClass ( cv::Mat& _model ) : tmpM ( _model )
{
};
private:
cv::Mat& tmpM;
}然后在"first.cpp“中,我这样使用它:
MyClass::tmpM ( cv::Mat& _model )
{
...
}然后,我将这个"first.h“包含在我的”substd.h“中,并将它包含在我的”第三个d.h“中,然后在我的"third.cpp”中尝试这样做:
cv::Mat testMat ( height, width, CV_8UC3 );
tmpM myM ( testMat );然后我犯了错误,说:
‘'MyClass::tmpM':不是函数 错误C2512:'MyClass':没有适当的默认构造函数可用 IntelliSense:声明与"cv::Mat& MyClass::tmpM“不兼容 IntelliSense:缺少显式类型(假设为“int”)
在你问之前,我不得不说我确实搜索并询问了这个问题,但仍然无法解决。我是个学习者,有人能帮我解决这个问题吗?谢谢。
发布于 2012-10-21 12:09:04
你犯的错误很明显。
'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-21 12:08:39
你宣称:
cv::Mat& tmpM;并再次声明:
MyClass::tmpM ( cv::Mat& _model )在第一个例子中,您可以在object上声明。在第二步,您将声明一个函数。
修复其中一个或另一个以便它们匹配。
https://stackoverflow.com/questions/12997638
复制相似问题