2012-11-03 166 views
1

林编译下面的代码片段 奇怪的链接错误2008

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

和获取下列链接错误

错误LNK2019:无法解析的外部符号“市民:无效__thiscall TLD :: TLD :: processImage来(CV类:: MAT)”(?processImage来@ TLD @ TLD @@ QAEXVMat @简历@@@ Z)的函数引用_main

现在我已经改变了代码,这样的事情

Mat frame ; 
tld->processImage(0); 

和获取以下链接错误

错误C2664:“TLD :: TLD :: processImage来”:无法从“诠释”转换参数1“CV ::垫” 没有构造函数可采取源类型,或构造函数重载分辨率是模棱两可的

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

只有processImage()方法才会出现此问题。 我可以毫无问题地调用其他“tld”方法。

任何帮助表示赞赏。

感谢

+0

你原来的问题意味着你错过了(链接时至少有一个obj文件)。新的错误是显而易见的,并且是一个编译器错误:您没有从int到Mat的转换... – MFH

+0

您能否发布一些关于您的TLD类的更多信息? – vvnraman

回答

0

我认为你最有可能缺少cv::Mat的参考。如果TLD课程在其他地方工作,那几乎可以肯定是因为你在这个方法调用的地方没有包含cv

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

#ifndef CV 
#define CV 

并在文件底部添加;

#endif 

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

+0

为简历添加标题帮助了我。谢谢 !!! – Sandeep

0

C++有两个阶段,你的代码转换成可执行代码,首先是编制和第二链接。在第一阶段编译器查找代码语法,并在此阶段明白,您有一个名为processImage的函数,它接受一个类型为cv::Mat的参数,但在第二阶段链接程序查找其实现并找不到它时,是否实现了该方法或者只是声明?如果答案是肯定的,你是否包含链接过程中包含你的实现的源文件(.cpp)?如果函数来自外部库,那么您是否将该库包含在传递给链接器的库列表中?通过回答这个问题,我相信你总是可以解决unresolved external symbol错误的连接器:)

+0

感谢一吨清除空气!!!。这肯定会帮助我调试这样的错误。感谢您节省了我很多时间:) – Sandeep