作者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/cn.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