模板化函数..错误:template-id与任何模板声明都不匹配

时间:2010-10-14 15:37:25

标签: c++ generics strcmp function-templates

我写了一个功能模板一个明确专门的模板化函数,它只需要3个参数并计算其中的最大值并打印出来。

专用函数导致错误,而模板工作正常。 但我想使用 char * type

这是我得到的错误=&gt; error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration

以下是我的代码:

    template <typename T>
    void Max(T& a,T& b,T& c)
    {
            if(a > b && a >> c)
            {
                    cout << "Max: " << a << endl;
            }
            else if(b > c && b > a)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << c << endl;
            }
    }

    template <>
    void Max(char* a,char* b,char* c)
    {
            if(strcmp(a,b) > 0 )
            {
                    cout << "Max: " << a << endl;
            }
            else if(strcmp(b,c) > 0)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << b << endl;
            }
}

2 个答案:

答案 0 :(得分:7)

您需要参考指针:

template <> 
void Max(char*& a,char*& b,char*& c) 

也就是说,使用显式专门化会更好 ,而只是重载函数:

void Max(char* a, char* b, char* c)

专门化功能模板几乎总是一个坏主意。有关更多信息,请参阅Herb Sutter的"Why Not Specialize Function Templates?"

答案 1 :(得分:3)

我遇到了同样的问题并使用typedef修复了它:

typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)