最近用VS2013編程時,出現如下錯誤:
錯誤 75 error LNK2019: 無法解析的外部符號 "public: __thiscall CmCurveEx::CmCurveEx(class cv::Mat const &,float)" (??0CmCurveEx@@QAE@ABVMat@cv@@M@Z),該符號在函數 "public: bool __thiscall CaptureToyContourPixel::CaptureGLBufferToBMPOf24BitsInAnyLarge(char *,int,int,int,int)" (?CaptureGLBufferToBMPOf24BitsInAnyLarge@CaptureToyContourPixel@@QAE_NPADHHHH@Z) 中被引用 C:\Users\liulimingl\Desktop\EasyToy4.24\DrawDll\CaptureToyContourPixel.obj DrawDll
然後各種查閱,有說是找不到附加依賴項的,提出這樣解決:
project-屬性--link--輸入--依賴庫: 添加相應的庫文件.lib
實驗後,發現仍然不正確,最後在一篇博客中找到解決方法如下:
有一個解決方案,有兩個工程A,B。工程B中定義了一個類,在工程A的demo.cpp中引用該類,但是如果是
#include "XX,h",則會出現“error LNK2019: 無法解析的外部符號”
如果是#include "XX.cpp",則可以順利編譯通過。
想來是因爲引用 .h 文件導致找不到.cpp中的定義,而引用.cpp可以通過.cpp找到.h(.cpp有對.h的include)
但是如果同在工程B下面,則#include "XX,h"也是正確的,它會自動關聯到同名的(反正是對應的).cpp文件。
在不同工程中應該如何引用呢?
看見一種原因分析,如下:
現場情況:
funcname 在文件file.cpp/h中定義實現
void funcname(void) {;}
filecall.c文件內呼叫funcname()函數。
出現上面情況。
症因:因c/c++混合編程, c文件內函數無法呼叫c++文件內函數。
解決,或者將c文件名改爲.cpp,或者將c++文件名改爲.c
上面的解決採用將 file.cpp 更名爲file.c即可。
在這裏mark一下,轉自:http://blog.csdn.net/friday5pm/article/details/1523859