1

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

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

并获得以下链接器错误

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

现在我把代码改成了这样

Mat frame ;
tld->processImage(0);

并低于链接器错误

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

问题是当我调用方法 tld->processImage(frame) 我得到这个链接器错误“未解析的符号”但是当我用不正确的类型作为参数调用这个方法时,它给出了另一个“无法转换参数”错误,因此承认方法的事实有没有。

此问题仅发生在 processImage() 方法中。我可以毫无问题地调用“tld”的其他方法。

任何帮助表示赞赏。

谢谢

4

2 回答 2

0

C++有两个阶段将您的代码转换为执行代码,第一个是编译,第二个是链接。在第一阶段编译器寻找代码语法,在这个阶段它知道你有一个名为的函数processImage,它接受一个类型的参数cv::Mat,但是在第二阶段链接器寻找它的实现并且找不到它,你实现了那个方法还是只是申报??如果答案是肯定的,您是否.cpp在链接过程中包含了包含您的实现的 source() 文件?如果函数来自外部库,您是否将该库包含在传递给链接器的库列表中?通过回答这个问题,我相信你总能解决unresolved external symbol链接器的错误:)

于 2012-11-03T19:09:49.750 回答
0

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

如果你有多个包含,cv你应该添加到头文件的顶部;

#ifndef CV
#define CV

并在文件底部添加;

#endif

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

于 2012-11-03T19:13:14.663 回答