2010-10-14 17 views
5

napisałem szablon funkcja i jawnie wyspecjalizowanym matrycy funkcja który po prostu pobiera 3 argumenty i oblicza największym wśród nich i drukuje ją.matrycy Funkcje .. ERROR: template-id nie znaleziono żadnych deklaracji szablonu

Specjalna funkcja powoduje błąd, a szablon działa poprawnie. Ale chcę pracować z char * typ.

Jest to błąd otrzymuję => error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration

Poniżej znajduje mój kod:

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; 
      } 
} 
+0

Najpierw upewnij oryginalny podpis właściwego. template void Max (T & a, T & b, T & c) –

+0

W moim przypadku jest to spowodowane przez dodanie const do returnt typu specilizatoin, co powoduje niezgodność z podstawową funkcją szablonu. – FaceBro

Odpowiedz

7

Trzeba wziąć kursory przez odniesienie:

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

że wymieniony , byłoby lepiej niż używać explicite specializ i zamiast tego po prostu przeładować funkcję:

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

To prawie zawsze zły pomysł na specjalizację szablonów funkcji. Aby uzyskać więcej, zobacz Herb Sutter na "Why Not Specialize Function Templates?"

3

wpadłem na ten sam problem i naprawić go za pomocą typedef:

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