Шаблонные функции .. ОШИБКА: идентификатор шаблона не соответствует ни одному объявлению шаблона - PullRequest
5 голосов
/ 14 октября 2010

Я написал шаблон функции и явно специализированную шаблонную функцию , которая просто принимает 3 аргумента, вычисляет самый большой из них и печатает его.

специализированная функция вызывает ошибку, тогда как шаблон работает нормально.Но я хочу работать с char * type .

Это ошибка, которую я получаю => 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 ]

7 голосов
/ 14 октября 2010

Вам нужно взять указатели по ссылке:

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

Тем не менее, было бы лучше не использовать явную специализацию и вместо этого просто перегрузить функцию:

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

Почти всегда плохая идея специализировать шаблоны функций.Для получения дополнительной информации см. Херб Саттер «Почему бы не специализировать шаблоны функций?»

3 голосов
/ 15 февраля 2012

Я столкнулся с той же проблемой и исправил ее с помощью typedef:

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