作者nicknick0630 (NICK)
看板C_and_CPP
標題[問題] CL.exe
時間Fri Apr 20 22:34:46 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
window10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
vs 2017
問題(Question):
我寫了2個標頭檔
1. BinaryHeap.h
2. MinHeap.h
Minheap是繼承BinaryHeap
我把2個都寫在namespace MyHeap 中
然後我都是把implement和declare分開
像這樣
namespace MyHeap
{
template<typename T>
class BinaryHeap
{
//declare
void function(void) const;
};
template<typename T>
void BinaryHeap<T>::function(void) const
{
//implement
}
}
但是編譯後會出現
"CL.exe"以返回碼2結束
然後我把BinaryHeap.h的implement搬到class中之後
像這樣
namespace MyHeap
{
template<typename T>
class BinaryHeap
{
void function(void) const
{
//implement
}
};
}
就可以編譯了
我想問問題是出在哪裡
然後為甚麼只要BinaryHeap.h改成這樣就可以過
而不是2個header都要改
我覺得應該不是我的code有寫錯因為通過編譯後可以運行
但如果覺得需要補上程式碼我會放上來
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.183.79
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1524234888.A.25D.html
1F:推 LPH66: 因為是 template。模版在 T 給定前都還是未完成的程式碼 04/20 22:44
2F:推 LPH66: 喔, 我看錯了... cl 返回 2 應該是編譯錯誤 04/20 22:49
3F:→ LPH66: 應該是你的定義那部份沒有加上 template<typename T> 04/20 22:49
4F:→ LPH66: template<typename T> void BinaryHeap<T>::function(void) 04/20 22:50
5F:→ LPH66: 你的 class 宣告在 }; 就結束了, 所以上面的 T 也到此為止 04/20 22:51
6F:→ LPH66: 下面要再用 <T> 要重新說"等一下的 T 是模版參數" 04/20 22:51
7F:→ LPH66: 是說, 既然是編譯錯誤應該有別的錯誤訊息 04/20 22:53
抱歉是我文章忘了打@@
我的code是有加template的
所以cl.exe返回2有地方編譯不過囉?
※ 編輯: nicknick0630 (140.117.183.79), 04/20/2018 23:07:59
8F:推 LPH66: 你應該要去找記錄或輸出等地方, 絕對會有詳細的錯誤訊息 04/20 23:32
9F:推 d8888: 報告一個個人遇過的罕見原因:VS 語系設定問題 04/21 21:16
10F:→ d8888: 之前也遇過 CL.exe 返回 2。VS 改英文語系 link 就過 04/21 21:16
11F:→ d8888: 一樣的 code VS 改中文語系馬上就 link 不會過.... 04/21 21:16
12F:→ d8888: 當然不是說一定是這原因造成的 04/21 21:16
13F:→ d8888: 只是當開 debug build log 還排查不出問題時,也許連結環 04/21 21:17
14F:→ d8888: 境也要考慮.... 04/21 21:17
15F:推 d8888: 對不起工作太累沒看清楚貼文,請無視我剛說的..... 04/21 21:19