C++ 模板函数错误
我有一个函数,它接受一个名为“Triple”的类的参数,并返回float类型的3个值的平均值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
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
上运行的一个普通函数,它本身不需要是模板。