2014-09-10 44 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

相关问题