2016-11-15 12 views
1

と一致していない私は、C++の関数テンプレートの次のコードを持っている:C++テンプレート関数のエラー:テンプレートIDは、任意のテンプレート宣言

class UserHelpler{ 

public: 

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

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

私はそれを構築する場合、それは次のエラーを示している:

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

問題とその修正方法は何ですか?

答えて

1

問題は、ポインタと参照が異なることです。テンプレートの特殊化には、int*int&という異なるタイプのテンプレートと互換性のない署名があります。

おそらく、あなたは

createHelper<int>(int& p_user) 

代わりの

createHelper<int>(int* p_user) 
+0

、それは私がcreateHelper に変更し、同じエラー – ratzip

0

、あなたのテンプレート宣言が参照タイプであるためにあなたのパラメータが必要ですが、あなたの専門分野であなたの代わりにポインタを提供する必要がありますそれは一致しません。 (INT&IはcreateHelper (INT&P_USER)に変更

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

です:にあなたの専門分野を変更します。

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

またはそれに代わり、あなたのテンプレート宣言を変更p_user)、それは同じエラーです – ratzip

+0

私のためのWoks - [ライブコード](http://coliru.stacked-crooked.com/a/ecce20bb8c2127eb) – Smeeheey

関連する問題