2014-09-10 150 views
0

我讀過這可能是智能感知的問題,但我真的不知道它是真的還是不真實。 當我編譯代碼時,出現錯誤(標題),不知道如何解決。我的書(Stephen Prata的「Sams C++ Primer Plus」)沒有回答我的問題。我寫了一個非常類似的程序,並沒有出現問題。沒有函數模板的實例匹配指定的類型

也許問題是在類型說明符?它與模板的一樣嗎?真的很抱歉我的語言...

#include <iostream> 

template <typename T> 
T maxn(T tab[], int size); 

template <> float maxn<float>(float, int); // Problem appears here... 

int main() 
{ 
    std::cin.get(); 
    return 0; 
} 

template <typename T> 
T maxn(T tab[], int size) 
{ 
    T max = tab[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (tab[i] > max) max = tab[i]; 
    } 
} 

我很感激任何建議。謝謝!

+0

請至少發佈您收到的錯誤。你是否也可以發佈其他程序的部分工作? – Gutblender 2014-09-10 18:45:57

回答

1

專業化的第一個參數是不正確的。你給float,但根據模板,它應該是一個浮動陣列。

template <> float maxn<float>(float[], int); 
//        ^
// You need to indicate that the first parameter is an array. 

請注意,您沒有爲專業化聲明正文,因此如果嘗試使用它,鏈接將失敗。 (除非您在另一個編譯單元中提供實現。)

+0

哦......所以專業化必須與模板具有相同的一組參數。謝謝! (我沒有專業化的身體,因爲我已經中斷了寫作,當錯誤發生時) – Seu 2014-09-10 18:56:56

+0

@Seu是的,否則你不是專門研究模板,你只是提供了一個重載 - 這很好,它只是不會成爲模板專業化。 ('float maxn(float,int);'是有效的。) – cdhowie 2014-09-10 18:58:32

相關問題