我正在编译下面的代码片段
cv::Mat frame ;
tld->processImage(frame);
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”的其他方法。
感谢任何帮助。
谢谢
答案 0 :(得分:0)
C++
有两个阶段将您的代码转换为执行代码,第一个是编译,第二个是链接。在第一阶段编译器中查找代码语法,在此阶段,它理解您有一个名为processImage
的函数,它接受一个cv::Mat
类型的参数,但在第二阶段链接器中寻找它的实现,但不能找到它,你实现了该方法还是只是声明它?如果答案是肯定的,你是否在链接过程中包含了包含你的实现的源(.cpp
)文件?如果函数来自外部库,您是否将该库包含在传递给链接器的库列表中?通过回答这些问题,我确信你总能解决链接器的unresolved external symbol
错误:)
答案 1 :(得分:0)
我认为您很可能错过cv::Mat
的引用。如果TLD课程在其他地方工作,那几乎可以肯定,因为您在进行此方法调用的地方没有cv
的包含。
如果cv
有多个包含,则应添加到头文件的顶部;
#ifndef CV
#define CV
在文件底部添加;
#endif
这将确保文件只编译一次,并且在我经常编写c ++时用于解决很多链接器问题。