没有函数模板的实例与指定的类型匹配

时间:2014-09-10 18:42:28

标签: c++ templates

我读过这可能是智能感知的问题,但我真的不知道是不是真的。 当我编译代码时,我得到一个错误(标题),不知道如何解决它。我的书(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];
    }
}

我感谢任何建议。谢谢!

1 个答案:

答案 0 :(得分:2)

专业化的第一个参数是不正确的。你给float但是根据模板,它应该是一个浮点数组。

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

请注意,您没有为专门化声明主体,因此如果您尝试使用它,链接将失败。 (除非您在另一个编译单元中提供实现。)