我在下面的代码片段中编译

cv::Mat frame ;
tld->processImage(frame);

和获取以下链接器错误

错误LNK2019:无法解析的外部符号“公共(public):void __thiscall tld::TLD::processImage(class cv::Mat)”(?processImage @ TLD @ tld @@ QAEXVMat @ cv @@@ Z)在函数_main中引用

现在,我将代码更改为如下所示
Mat frame ;
tld->processImage(0);

和低于链接器错误

错误C2664:'tld::TLD::processImage':无法将参数1从'int'转换为'cv::Mat'
没有构造函数可以采用源类型,或者构造函数重载解析度不明确

问题是当我调用方法tld-> processImage(frame)时,我收到此链接器错误“无法解析的符号”,但是当我使用不正确的类型作为参数调用此方法时,它又给出了另一个“无法转换参数”错误,因此确认该方法在那儿。

仅使用processImage()方法会出现此问题。
我能够毫无问题地调用其他“tld”方法。

任何帮助表示赞赏。

谢谢

最佳答案

我认为您很可能缺少cv::Mat的参考。如果TLD类在其他地方工作,那几乎可以肯定是因为在进行此方法调用的位置没有cv的包含。

如果cv包含多个包含,则应将其添加到头文件的顶部;

#ifndef CV
#define CV

并在文件底部添加;
#endif

这将确保文件仅被编译一次,并在我经常编写c++时为我解决了很多链接器问题。

关于c++ - VS 2008中的奇怪链接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13212441/

10-11 17:08