C++ 模板化函数。。错误:模板id与任何模板声明都不匹配

C++ 模板化函数。。错误:模板id与任何模板声明都不匹配,c++,generics,strcmp,function-templates,C++,Generics,Strcmp,Function Templates,我编写了函数模板和显式专门化的模板函数,它只接受3个参数,计算其中最大的参数并打印出来 专用函数导致错误,而模板工作正常。 但是我想使用char*type 这就是我得到的错误=> 错误:“void Max(char,char,char)”的模板id“Max”与任何模板声明不匹配 以下是我的代码: template <typename T> void Max(T& a,T& b,T& c) { if(a >

我编写了函数模板显式专门化的模板函数,它只接受3个参数,计算其中最大的参数并打印出来

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

这就是我得到的错误=>
错误:“void Max(char,char,char)”的模板id“Max”与任何模板声明不匹配

以下是我的代码:

    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;
            }
}
模板
最大无效值(T&a、T&b、T&c)
{
如果(a>b&&a>>c)
{

cout您需要通过引用获取指针:

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

专门化函数模板几乎总是一个坏主意。有关更多信息,请参阅Herb Sutter的

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

typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)
typedef char*charPtr;
模板
最大无效值(charPtr&a、charPtr&b、charPtr&c)

首先确保原始签名正确。模板void Max(T&a、T&b、T&c)在我的情况下,这是由于在returnt type specilizatoin中添加const导致的,因此导致与主模板函数不匹配。
typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)