我有一个函数,它接受一个名为“Triple”的类的参数,并返回类型为float的3个值的平均值。
template <typename ElemT>
float average(Triple ElemT<float> &arg){
float pos1 = arg.getElem(1);
float pos2 = arg.getElem(2);
float pos3 = arg.getElem(3);
return ( (pos1+pos2+po3) /3 );
}
当我尝试编译时,我得到了
q2b.cpp:32: error: template declaration of `float average'
q2b.cpp:32: error: missing template arguments before "ElemT"
不太清楚这意味着什么。
答案 0 :(得分:5)
function参数的声明使用了错误的语法。也许你打算写这个:
template <typename ElemT>
float average(Triple<ElemT> &arg){
...
}
或者,如果该函数应该特定于Floles的三元组:
float average(Triple<float> &arg){
...
}
答案 1 :(得分:0)
Triple ElemT<float> &arg
不是有效类型
您的意思是Triple<ElemT> &arg
吗?
答案 2 :(得分:0)
目前,您还不清楚模拟参数的含义。看来非模板函数应该可以正常工作:
float average(Triple const &arg) {
return (arg.getElem(1) + arg.getElem(2) + arg.getElem(3)) / 3.0f;
}
如果Triple
本身是一个可以在不同类型上实例化的模板,你可以这样做:
template <class T>
T average(Triple<T> const &arg) {
return (arg.getElem(1) + arg.getElem(2) + arg.getElem(3)) / T(3.0);
}