【问题标题】:Defining and calling a C++ function of a specialized template定义和调用专用模板的 C++ 函数
【发布时间】:2011-12-17 00:50:15
【问题描述】:

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

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()' 的模板 ID 'echo' 不匹配 任何模板声明

Demo.

【问题讨论】:

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


【解决方案1】:
//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";
}

附:当你的意思是'\n'时,永远不要说endlWhat is the C++ iostream endl fiasco?

【讨论】:

  • 谢谢@Rob!最后一个问题,为什么函数“echo()”不需要模板说明符?
  • @jrd1,因为echo() 本身不是template 函数。它是template class 的成员方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多