C++中運用模版報“無法解析的外部符號”錯誤解決方法
最近新寫了一個Socket通訊類SocketServer,在傳輸結構體和數字時運用到了模版函式,
然而在實現呼叫時,編譯過程中模版函式會報“error LNK2019:無法解析的外部符號”。
經過查詢發現出現這一問題的原因是C++編譯機制的問題,
即模板不支援分離編譯,具體原理見文章:點選開啟連結
解決方法目前已知有三種:
一是把模版函式歸總到一個SocketServer.template檔案中,在呼叫時include,這種方法可編譯成功,但VS好像不支援template檔案的顯示,程式碼都是黑色的
二是把SocketServer.cpp和SocketServer.h合併為SocketServer.h,即所有函式均在標頭檔案裡實現。
三是隻把模版函式的實現放到標頭檔案中,這樣保留了SocketServer.cpp,方便此後的擴充(我採用了這種解決方法)
還有個白痴錯誤就是函式前沒加"類名:"
歡迎補充~
相關推薦
C++中運用模版報“無法解析的外部符號”錯誤解決方法
最近新寫了一個Socket通訊類SocketServer,在傳輸結構體和數字時運用到了模版函式, 然而在實現呼叫時,編譯過程中模版函式會報“error LNK2019:無法解析的外部符號”。 經過查詢發現出現這一問題的原因是C++編譯機制的問題, 即模板不支援分離編譯,具體
在C++中使用模板出現“無法解析的外部符號”問題
當我們宣告和定義一個模板的時候,必須要讓宣告和定義放在一個檔案裡。否則編譯器會報錯。 這就是為什麼boost的實現檔案的字尾名是hpp了。 這其中的理由是什麼呢?為什麼會這樣? 首先,一個編譯單元(translation unit)是指一個.cpp檔案以及它所
c++連接mysql數據庫出現無法解析外部符號的問題
vs、解析外部符號include,lib文件夾都已經拷到了項目根目錄,並且設置好了路徑,生成就會出現無法解析的外部符號,提示我無法轉到函數的定義,最後發現vs2017默認win32,但是我的程序集64位的。更改後,重新設置目錄,路徑即可。c++連接mysql數據庫出現無法解析外部符號的問題
C++ error LNK2019: 無法解析的外部符號 錯誤解決方案
今天在實現類模板特例化的時候遇到一個問題,就是把類模板函式實現放到類的cpp檔案中,然後在main函式中使用這個類的時候,就會出現無法解析的外部符號:函式名(xxxx)等錯誤,那麼出現這個錯誤的原因是什麼呢?原因就是現在的編譯裡不支援模板函式的申明和實現分開,要像上面那樣使用
error2019無法解析外部符號
“error LNK2019: 無法解析的外部符號 error LNK2001: 無法解析的外部符號“private: static struct _OVERLAPPED CUsbCom::g_WriteOverlapped” 應該是工程設定的問題 沒有連線相應
error LNK2019: 無法解析的外部符號的解決方法
C++工程編譯時出現如下連結錯誤提示: 原因一:只是在.h裡面聲明瞭某個方法,沒有在cpp裡面實現; 原因二:在工程中加入了有相同名字的檔案或者類; 原因三:如果此類為靜態庫中定義的類,可能沒有新增標頭檔案目錄和檔案引用的lib靜態庫路徑; 新增方法: 新增工
VS2015無法解析外部符號
在使用VS編輯C++時,遇到了無法解析外部符號的錯誤 嚴重性程式碼說明專案 檔案行 錯誤LNK2019 無法解析的外部符號 "public: __thiscall Employee::Employe
gSoap的“error LNK2001: 無法解析的外部符號 _namespaces”解決方法
錯誤2error LNK2001: 無法解析的外部符號 _namespaces解決方法:1. 在工程中定義 WITH_NONAMESPACES 巨集2.嘗試 "#include "add.nsmap"
OpenCv在win下靜態庫的編譯和使用,以及部分無法解析外部符號的錯誤解決
這裡演示的是opencv3.4版本的編譯和使用過程。1、靜態庫編譯CMake進行配置,編譯時我選擇build目錄為build-static。其中需要設定選擇安裝目錄,設定 “CMAKE_INSTALL_PREFIX” 為 /build-static/install
C#中WebBrowser.DocumentCompleted事件多次調用問題解決方法
post lin ont display err 框架 center 一個 blank 關於DocumentCompleted事件,MSDN給出的解釋是在文檔加載完畢後執行,但是在我的程序中DocumentCompleted卻被多次調用,查了一下資料,大概出現了以下幾種情
C++中 使用陣列作為map容器VAlue值的解決方法
1)是用Vector容器代替陣列 2)使用陣列指標(需要注意區域性變數的問題,指標是否需要用new建立) int red [ 3 ] = { 1 , 0 , 0 }; int green [
報錯from 子句語法錯誤 解決方法
nbsp -1 alt http 1-1 解決 語法 ges cnblogs 解決方法: 報錯from 子句語法錯誤 解決方法
Spring MVC中傳遞json數據時顯示415錯誤解決方法
ping 數據 value 解決方法 傳遞 ica ons pub eth 在ajax中設置 ContentType為‘application/json;charset=utf-8‘ 傳遞的data類型必須是json字符串類型:{“key”:"va
JSP 使用<%@include%>報Duplicate local variable path 錯誤 解決方法
錯誤提示 cat not 情況 cal quest epon bsp multi 錯誤提示:Multiple annotations found at this line:- Duplicate local variable path- Duplicate local va
error: C++ preprocessor "/lib/cpp" fails sanity check錯誤解決方法
ubunt essential header apt yum 運行命令 process all sso error: C++ preprocessor "/lib/cpp" fails sanity check 問題的解決 問題的根源是缺少必要的C++庫。如果是CentO
CentOS下MySQL安裝失敗,報socket '/tmp/mysql.sock錯誤解決方法
1、在centos裡安裝mysql資料庫後,登入時提示‘/tmp/mysql.sock’第一種解決辦法:採用ln連結方式進行處理ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock 因為是從tmp目錄下,所以有可能/tm
VS工程中[error C2872: “ACCESS_MASK”: 不明確的符號]的解決方法
具體資訊如下: 1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(8534): error C2872: “ACCESS_MASK”: 不明確的符號 1> 可能是“C:\Program Files (x86)\
應用程式中嵌入的網頁執行時出現“指令碼錯誤”解決方法
CComPtr<IWebBrowser2> pWB2; HRESULT hr; hr = m_wndIE.QueryControl(&pWB2); if (pWB2) { CComVariant v; CComBSTR url(
kafka執行錯誤:提示找不到或者無法載入主類錯誤解決方法
kafaka版本:kafka_2.11-1.1.0原因有2個:1 目錄不能有空格 D:\Soft\kafka_2.11-1.1.0 , 放在Program Files目錄中一直有問題2 修改D:\Soft\kafka_2.11-1.1.0\bin\windows\ka
C++ static變量出現 無法解析的外部符號:public:static的錯誤
解決方法: 除了在標頭檔案中定義以外,應該在類的生命之外重新定義一次。 .h中: class A { ... public: static int a; }; .cpp中: #include ... int A:a = 0; 原因: 靜態變數雖然是成員