我目前正在深入学习 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'
时,永远不要说 endl
。 What is the C++ iostream endl fiasco?
关于c++ - 定义和调用专用模板的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7925217/