2010-06-08 65 views
0

我有一個函數,它接受一個名爲「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" 

不太清楚這意味着什麼。

回答

5

函數參數的聲明使用錯誤的語法。也許你的意思是這樣寫:

template <typename ElemT> 
float average(Triple<ElemT> &arg){ 
    ... 
} 

或者,如果函數應該只是具體到彩車的三倍:

float average(Triple<float> &arg){ 
    ... 
} 
+0

哦,我想要超越並讓ElemT只能用於浮動,這是正確的嗎? 'float float(三重&arg)' – silent 2010-06-08 05:32:37

+0

@ sil3nt:是的,如果你只是想爲它浮動,這是正確的(編輯到我的答案) – sth 2010-06-08 05:33:50

+0

謝謝,我仍然需要使用'template '在此之前,即使它具體浮動? – silent 2010-06-08 05:36:57

0

Triple ElemT<float> &arg是不是有效的類型

你的意思Triple<ElemT> &arg

+0

爲什麼還要模板參數?怎麼樣只是三重? – Anthony 2010-06-08 05:31:58

+0

是啊那是我失去了什麼,你是對的我想要三聯 silent 2010-06-08 05:36:02

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