错误3错误LNK2019:未解析的外部符号“public:class cv :: Mat __thiscall ft_data :: get_image(int,int)”

时间:2013-07-22 11:43:55

标签: visual-c++ opengl opencv visual-studio-2012

我正在创建一个面部识别程序,但我有一些错误,我没有并且想法如何解决它...

Mat im = data.get_image(i,0); if(im.empty())continue; //Unresolved external symbol
vector<Point2f> p = data.get_points(i,false); int n = p.size(); //Unresolved external symbol

这是我得到的错误

Error   3   error LNK2019: unresolved external symbol "public: class cv::Mat __thiscall ft_data::get_image(int,int)" (?get_image@ft_data@@QAE?AVMat@cv@@HH@Z) referenced in function "public: void __thiscall face_detector::train(class ft_data &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class cv::Mat const &,bool,bool,float,float,int,class cv::Size_<int>)" (?train@face_detector@@QAEXAAVft_data@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABVMat@cv@@_N3MMHV?$Size_@H@6@@Z)    D:\Workshop\Final\C++ Console Application\AAM-Raw\AAM-Raw\AAM-Raw.obj   AAM-Raw
Error   4   error LNK2019: unresolved external symbol "public: class std::vector<class cv::Point_<float>,class std::allocator<class cv::Point_<float> > > __thiscall ft_data::get_points(int,bool)" (?get_points@ft_data@@QAE?AV?$vector@V?$Point_@M@cv@@V?$allocator@V?$Point_@M@cv@@@std@@@std@@H_N@Z) referenced in function "public: void __thiscall face_detector::train(class ft_data &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class cv::Mat const &,bool,bool,float,float,int,class cv::Size_<int>)" (?train@face_detector@@QAEXAAVft_data@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABVMat@cv@@_N3MMHV?$Size_@H@6@@Z) D:\Workshop\Final\C++ Console Application\AAM-Raw\AAM-Raw\AAM-Raw.obj   AAM-Raw

在我放#include <GL/glext.h>之前它没有显示错误,我需要该标头来声明一个变量

我正在使用Visual Studio 2012和c ++控制台应用程序

2 个答案:

答案 0 :(得分:0)

您的问题可能是这些问题中的任何一个。请更加努力地找到相关问题并继续解决。我没有完整的代码,这就是为什么我不知道哪个是问题。

我猜您的问题是由于源代码中的train函数而发生的。我更喜欢你在那段代码中寻找下面的问题。必然,你有全局常数问题,但也可能缺少函数体或变量。

全局常量

  

C ++全局常量具有静态链接。这与C不同。如果   你尝试在多个文件中使用C ++中的全局常量   未解决的外部错误。编译器优化全局常量   out,不为变量保留空间。一种解决方法   此错误是在头文件中包含const初始化   并在必要时在您的CPP文件中包含该标题,就像   这是功能原型。另一种可能性是制作变量   非常数并在评估时使用常量参考。

缺少功能正文或变量

  

只需一个函数原型,编译器就可以继续运行   错误,但链接器无法解析对地址的调用,因为   没有保留功能代码或可变空间。你不会看到的   这个错误直到你创建一个对链接器的函数的调用   必须解决。

自动(功能范围)变量

  

在函数内声明的变量只能在   该职能的范围。

功能内联问题

  

如果您正在使用函数内联,则必须:

     
      
  • 在您包含的头文件中实现内联函数。

  •   
  • 在头文件中打开了内联。

  •   
     

如果您使用#pragma inline_depth编译器指令,请生成   确保您设置的值为2或更高。零值将变为零   关闭内联。还要确保使用/ Ob1或/ Ob2编译器   选项。混合使用不同的内联和非内联编译选项   模块有时会导致问题。如果使用创建C ++库   函数内联打开(/ Ob1或/ Ob2)但相应的   描述函数的头文件已关闭内联(没有   选项),您将收到错误LNK2001。这些函数没有内联   从头文件到代码,但因为它们不在   库文件没有地址来解析引用。同样的,   一个使用函数内联的项目,但定义了一个函数   .cpp文件而不是头文件中也会得到LNK2019。该   头文件包含在任何认为合适的地方,但是   函数仅在.cpp文件通过时内联   编译器;因此,链接器将函数视为未解析的   在其他模块中使用时的外部。

答案 1 :(得分:0)

如果您使用的是64位版本的OpenCV库,或者使用64位配置编译OpenCV,请不要忘记将video studio项目切换为64位。

当尝试在32位项目中使用64位库时,Visual Studio将提供Unresolved External错误,这实在令人困惑,因为您将包含正确的库..至少按名称。