我正在创建一个面部识别程序,但我有一些错误,我没有并且想法如何解决它...
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 ++控制台应用程序
答案 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错误,这实在令人困惑,因为您将包含正确的库..至少按名称。