2016-11-15 2 views
1

Ich habe den folgenden Code der Funktionsvorlage in C++:C++ Fehler Template-Funktion: template-ID übereinstimmen keine Template-Deklaration

class UserHelpler{ 

public: 

    template <typename ValueType> 
    void createHelper(ValueType& value); 
}; 

template<> 
void UserHelpler::createHelper<int>(int* p_user) 
{ 
} 

Als ich es bauen, es zeigt den folgenden Fehler:

error: template-id 'createHelper<int>' for 'void UserHelper::createHelper(int*)' 
does not match any template declaration 

Was ist das Problem und wie es zu beheben?

Antwort

1

Das Problem ist, dass Zeiger und Referenzen verschiedene Dinge sind. Ihre Vorlagenspezialisierung hat eine Signatur, die mit der Vorlage nicht kompatibel ist, da int* und int& unterschiedliche Typen sind. Wahrscheinlich

, müssen Sie

createHelper<int>(int& p_user) 

statt

createHelper<int>(int* p_user) 
+0

ich createHelper geändert (int & p_user), aber es ist der gleiche Fehler – ratzip

0

Ihre Template-Deklaration Ihre Parameter erfordert Typ zu sein von Referenz, aber in Ihrer Spezialisierung bieten Ihnen einen Zeiger statt, was nicht passt. Ändern Sie Ihre Spezialisierung auf:

template<> 
void UserHelpler::createHelper<int>(int& p_user) 

Oder alternativ Ihre Template-Deklaration ändern:

template <typename ValueType> 
void createHelper(ValueType* value); 
+0

ich geändert createHelper (int & p_user), aber es ist der gleiche Fehler – ratzip

+0

Woks für mich - [Live-Code] (http://coliru.stacked-crooked.com/a/ecce20bb8c2127eb) – Smeeheey

Verwandte Themen