我的第三方电话有C2758错误

时间:2012-10-21 12:04:59

标签: c++ class constructor default-constructor

我在“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”)

  

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

2 个答案:

答案 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 )

首先,你在对象上声明。在第二个你声明一个函数。

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