开发平台(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有写错因为通过编译后可以运行
但如果觉得需要补上程式码我会放上来
谢谢各位
作者:
LPH66 (-6.2598534e+18f)
2018-04-20 22:44:00因为是 template。模版在 T 给定前都还是未完成的程式码喔, 我看错了... cl 返回 2 应该是编译错误应该是你的定义那部份没有加上 template<typename T>template<typename T> void BinaryHeap<T>::function(void)你的 class 宣告在 }; 就结束了, 所以上面的 T 也到此为止下面要再用 <T> 要重新说"等一下的 T 是模版参数"是说, 既然是编译错误应该有别的错误讯息你应该要去找记录或输出等地方, 绝对会有详细的错误讯息