error LNK2001 无法解析的外部符号 "public: virtual bool __thiscall 问题解决办法

错误 18 error LNK1120: 17 个无法解析的外部命令 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\Debug\test1.exe 1 1 test1
错误 14 error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall CvParams::scanAttr(class std::basic_string,class std::allocator >,class std::basic_string,class std::allocator >)" (?scanAttr@CvParams@@UAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 11 error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall CvCascadeBoostParams::printAttrs(void)const " (?printAttrs@CvCascadeBoostParams@@UBEXXZ) C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 13 error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall CvParams::printAttrs(void)const " (?printAttrs@CvParams@@UBEXXZ) C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 12 error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall CvParams::printDefaults(void)const " (?printDefaults@CvParams@@UBEXXZ) C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 9 error LNK2019: 无法解析的外部符号 "public: __thiscall CvCascadeBoostParams::CvCascadeBoostParams(void)" (??0CvCascadeBoostParams@@QAE@XZ),该符号在函数 _main 中被引用 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 16 error LNK2019: 无法解析的外部符号 "public: __thiscall CvCascadeImageReader::NegReader::NegReader(void)" (??0NegReader@CvCascadeImageReader@@QAE@XZ),该符号在函数 "public: __thiscall CvCascadeImageReader::CvCascadeImageReader(void)" (??0CvCascadeImageReader@@QAE@XZ) 中被引用 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 17 error LNK2019: 无法解析的外部符号 "public: __thiscall CvCascadeImageReader::PosReader::PosReader(void)" (??0PosReader@CvCascadeImageReader@@QAE@XZ),该符号在函数 "public: __thiscall CvCascadeImageReader::CvCascadeImageReader(void)" (??0CvCascadeImageReader@@QAE@XZ) 中被引用 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 10 error LNK2019: 无法解析的外部符号 "public: __thiscall CvCascadeParams::CvCascadeParams(void)" (??0CvCascadeParams@@QAE@XZ),该符号在函数 _main 中被引用 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1
错误 8 error LNK2019: 无法解析的外部符号 "public: __thiscall CvHaarFeatureParams::CvHaarFeatureParams(void)" (??0CvHaarFeatureParams@@QAE@XZ),该符号在函数 _main 中被引用 C:\Users\Administrator\Desktop\OPENCV\重新生成traincascade\test1\traincascade.obj test1

上文共18个错误,未全列出 

程序是在vs2010里重新生成traincascade.exe文件,源代码traincascade.cpp是用的opencv2.4.6自带的文件(在opencv安装目录搜索一下即可找到),我是在现有可用opencv控制台程序的基础上,将traincascade.cpp源代码直接覆盖了源程序代码,结果出现了上述LNK错误,我参照网上介绍的诸多方法进行了尝试,结果问题还是解决不了,最后在一个帖子里找到了答案,即除了在traincascade.cpp中引用的.h文件外(应同时考虑*.h文件中所include的其他.h文件),还应将其对应的.cpp文件添加到项目中去,我为了保证万无一失,将opencv安装目录下,traincascade文件夹所在的所有.cpp文件都进行了添加,但这时弹出了新错误“错误5error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? d:\program files\opencv2.4\apps\traincascade\*.cpp”,解决办法是右键相应.cpp文件,属性》C/C++》预编译头,选择不适用预编译头,然后上面最开始出现的LNK2019和LNK2001错误就全都消失了。为了找出究竟是那些.CPP文件导致了LNK错误,我将所添加的CPP文件一个一个的重新移除,结果发现移除任何一个都会报错。

     解决方法原贴http://bbs.csdn.net/topics/210023866,看8楼和10楼的回复。
     
     解决问题过程参考过的帖子
http://blog.sina.com.cn/s/blog_7c21f4c50101k0dx.html
http://www.cnblogs.com/mothe123/archive/2012/11/05/2755722.html
http://www.firedragonpzy.com.cn/index.php/archives/3017

    “无法解析的外部命令”这种问题,应当就是头文件*.h定义了函数名,但是对应的*.cpp文件找不到,或者是*.cpp文件中未有函数名对应的实体。  



转载自:http://bbs.csdn.net/topics/390608666   


你可能感兴趣的:(C++,LNK2001)