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<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?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   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章