2017-07-23 4 views
-1

Ich habe ein Problem in Bezug auf explizite Spezialisierung in C++ ProgrammExplizite Spezialisierung - Template-ID passen keine Template-Deklaration

Ich möchte eine Spezialisierung für char * Typ machen, die eine Adresse an den längsten char Array zurückgibt, aber ich werden immer Fehler:

C:\Users\Olek\C++\8_1\main.cpp|6|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration| 
C:\Users\Olek\C++\8_1\main.cpp|38|error: template-id 'maxn<char*>' for 'char* maxn(char*)' does not match any template declaration| 

Hier ist der Code für das Programm

#include <iostream> 

template <typename T> 
T maxn(T*,int); 

template <> char* maxn<char*>(char*); 

const char* arr[5]={ 
    "Witam Panstwa!", 
    "Jak tam dzionek?", 
    "Bo u mnie dobrze", 
    "Bardzo lubie jesc slodkie desery", 
    "Chociaz nie powinienem", 
}; 

using namespace std; 

int main() 
{ 
    int x[5]={1,4,6,2,-6}; 
    double Y[4]={0.1,38.23,0.0,24.8}; 
    cout<<maxn(x,5)<<endl; 
    cout<<maxn(Y,4)<<endl; 
    return 0; 
} 

template <typename T> 
T maxn(T* x,int n){ 
    T max=x[0]; 
    for(int i=0;i<n;i++){ 
     if(x[i]>max) 
      max=x[i]; 
    } 
    return max; 
} 

template <> 
char* maxn<char*>(char* ch){ 
    return ch; 
} 

ich die Funktion noch nicht umgesetzt haben, aber es war declare d. Ich nehme auch an, dass es einfacher ist, Funktionsüberlastung zu verwenden, aber es ist eine Zuweisung aus einem Buch.

Vielen Dank für die Antworten im Voraus.

+0

Welche Vorlage erwarten Sie 'template <> char * MAXN (char *);' zu spezialisieren? – juanchopanza

+0

maxn Vorlage, Vorlage T maxn (T * x, int n) – IceKoldCilla

+0

oh warte, sollte ich auch zweiten Parameter hinzufügen? (int n) ?. Es funktioniert nicht – IceKoldCilla

Antwort

0

Ihre Vorlage gibt den Typ T zurück und nimmt einen Typ T*. Wenn Sie char* spezialisieren, dann braucht es eine char* zurückzukehren und eine char** nehmen oder stattdessen spezialisiert auf char

template <typename T> 
T maxn(T*,int); 

template <> char maxn<char>(char*, int); 
template <> char* maxn<char*>(char**, int); 

int main() { 
    char * str; 
    maxn(str, 5); 
    maxn(&str, 6); 
} 
+0

Danke für die Antwort – IceKoldCilla

Verwandte Themen