模板功能错误

时间:2010-06-08 05:25:37

标签: c++ templates gcc class

我有一个函数,它接受一个名为“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"

不太清楚这意味着什么。

3 个答案:

答案 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);
}