c ++模板函数错误:template-id与任何模板声明都不匹配

时间:2016-11-15 10:49:29

标签: c++ templates

我在C ++中有以下函数模板代码:

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

问题是什么以及如何解决?

2 个答案:

答案 0 :(得分:1)

问题是指针和引用是不同的东西。您的模板专精化具有与模板不兼容的签名,因为int*int&是不同的类型。

可能需要

createHelper<int>(int& p_user)

而不是

createHelper<int>(int* p_user)

答案 1 :(得分:0)

您的模板声明要求您的参数为参考类型,但在您的专业化中,您提供指针,而不是匹配。将您的专业化更改为:

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

或者将模板声明更改为:

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