получил ошибку C2758 для моего стороннего звонка

Я объявил свой класс следующим образом в моем «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)

Прежде чем вы спросите, я должен сказать, что я действительно искал и спрашивал об этом, но все еще не мог решить это. Я ученик, так может ли кто-нибудь помочь мне в этом? благодарю вас.

0

Решение

Ошибки, которые вы получили, довольно явные.

'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 );

и вот о чем говорят две последние ошибки.

2

Другие решения

Вы объявили это:

cv::Mat& tmpM;

и объявил это так:

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

Во первых, вы объявляете об объекте. Во втором вы объявляете функцию.

Исправьте одно или другое так, чтобы они совпадали.

1

По вопросам рекламы [email protected]