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

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

我目前正在深入学习 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;
}

error: template-id ‘echo<>’ for ‘void C::echo()’ does not match any template declaration

Demo .

最佳答案

//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?

关于c++ - 定义和调用专用模板的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7925217/

相关文章:

c++ - 错误 : no type named ‘value_type’ in ‘class

java - 编译 .java 文件时无法找到符号错误

C++ 错误 : cannot declare variable 'block' to be of abstract type 'AABB'

C++删除与分配位置不同的函数中的存储空间

c++ - 使用 sc 工具区分作为系统重启一部分的 Windows 服务启动和服务停止/启动

php - 如何使用swift mailer读取模板?

c++ - 根据模板类型动态指定要使用的方法

c - 静态初始化顺序失败会在C程序中发生吗?

java - 从: javac error来源构建RStudio

c++ - 从 Visual Basic 调用 C++ DLL