Я объявил свой класс следующим образом в моем «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)
Прежде чем вы спросите, я должен сказать, что я действительно искал и спрашивал об этом, но все еще не мог решить это. Я ученик, так может ли кто-нибудь помочь мне в этом? благодарю вас.
Ошибки, которые вы получили, довольно явные.
'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 );
и вот о чем говорят две последние ошибки.
Вы объявили это:
cv::Mat& tmpM;
и объявил это так:
MyClass::tmpM ( cv::Mat& _model )
Во первых, вы объявляете об объекте. Во втором вы объявляете функцию.
Исправьте одно или другое так, чтобы они совпадали.