定义和调用专用模板的C ++函数

时间:2011-10-28 04:41:29

标签: c++ templates compiler-errors template-specialization

我目前正在深入学习C ++,而且我遇到了一些困扰了几个小时的东西。 为什么当我制作模板然后专门化它时,我无法为专用版本调用或定义该函数?编译器抱怨,我已经搜索了Google以获取可能的提示我做错了什么,但无济于事。我非常确定这是一件非常简单的事情,我忽略了:

template <typename T>
class C { };

//specialization to type char
template <>
class C <char> 
{
  public:
    void echo();
};

//compiler complains here
template <>
void C <char> :: echo() 
{
  cout << "HERE" << endl;
}
  

错误:'void C :: echo()'的template-id'echo&lt;&gt;'不匹配   任何模板声明

Demo

1 个答案:

答案 0 :(得分:7)

//specialization to type char
template <>
class C <char>
{
  public:
    void echo();
};

//template<>  <----- don't need to mention template<> here
void C <char> :: echo()
{
  cout << "HERE\n";
}

P.S。当你的意思是endl时,永远不要说'\n'What is the C++ iostream endl fiasco?