2010-10-14 59 views
5

我寫函數模板一個明確專門的模板功能它只是發生在3個參數,並計算它們之間並打印它最大的。模板化功能..錯誤:模板id不匹配任何模板聲明

專門的功能導致錯誤,而模板工作正常。 但我想與字符*類型

這是我得到=> 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; 
      } 
} 
+0

首先使原始簽名正確。模板 void Max(T&a,T&b,T&c) – 2010-10-14 15:57:09

+0

在我的情況下,它是由於向constants添加const specilizatoin造成的,因此導致與主模板函數不匹配。 – FaceBro 2017-09-26 16:09:51

回答

7

您需要通過引用採取指針:

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

那說,它會更好而不是使用顯式專題而是隻是超載功能:

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

專業化功能模板幾乎總是一個壞主意。如需更多信息,請參閱香草薩特的"Why Not Specialize Function Templates?"

3

我遇到了同樣的問題,使用的typedef固定它:

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