C++ 模板函数错误

C++ 模板函数错误,c++,templates,gcc,class,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+p

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

不太清楚这意味着什么。

函数参数的声明使用了错误的语法。也许你是想写这个:

template <typename ElemT>
float average(Triple<ElemT> &arg){
  ...
}
模板
浮动平均值(三重和arg){
...
}
或者,如果函数只针对三个浮点数:

float average(Triple<float> &arg){
  ...
}
浮动平均值(三重和arg){
...
}

函数参数的声明使用了错误的语法。也许你是想写这个:

template <typename ElemT>
float average(Triple<ElemT> &arg){
  ...
}
模板
浮动平均值(三重和arg){
...
}
或者,如果函数只针对三个浮点数:

float average(Triple<float> &arg){
  ...
}
浮动平均值(三重和arg){
...
}
三重元素和参数
不是有效类型

您的意思是
Triple&arg

Triple-ElemT&arg
不是有效的类型


您的意思是
Triple&arg

现在还不清楚模板参数的含义。非模板函数似乎可以正常工作:

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);
}
模板
T平均值(三重常数&arg){
返回值(arg.getElem(1)+arg.getElem(2)+arg.getElem(3))/T(3.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);
}
模板
T平均值(三重常数&arg){
返回值(arg.getElem(1)+arg.getElem(2)+arg.getElem(3))/T(3.0);
}

为什么还要麻烦使用模板参数?三倍怎么样?是的,这就是我迷失的方向,你是对的,我想要三倍,为什么还要麻烦模板参数呢?三倍怎么样?是的,这就是我迷失的方向,你是对的,我想要三倍,我想要超越,让ElemT只对float起作用,这个目的正确吗
float average(Triple&arg)
@sil3nt:是的,如果你只是想用它来表示浮点数,那是正确的(编辑到我的答案中)谢谢,在那之前我是否还需要使用
模板
,即使它是特定于浮点数的?@sil3nt:不,你不再需要
模板
来定义函数,由于没有留下“未指定”的通用模板参数(与我的答案中的第一个备选方案相反,在这个备选方案中,
ElemT
最终将是什么类型尚不确定)
average
只是在
Triple
上运行的一个正常函数,它本身不需要是一个模板。哦,我想覆盖并使ElemT仅对float起作用,这是否正确
float average(Triple&arg)
@sil3nt:是的,如果你只是想用它来表示浮点数,那是正确的(编辑到我的答案中)谢谢,在那之前我是否还需要使用
模板
,即使它是特定于浮点数的?@sil3nt:不,你不再需要
模板
来定义函数,由于没有留下“未指定”的通用模板参数(与我的答案中的第一个备选方案相反,在这个备选方案中,
ElemT
最终将是什么类型尚不确定)
average
只是在
Triple
上运行的一个普通函数,它本身不需要是模板。