Mar*_*ark 2 c++ recursion templates
这让我绕过弯道.作为一个自制练习,我想模拟一个类中的递归调用.在.h文件中我有:
template <typename T1>
class BinaryTree
{
public:
BinaryTree(T1 element);
~BinaryTree();
BinaryTree* addLeftLeaf(BinaryTree<T1>* node);
Run Code Online (Sandbox Code Playgroud)
等等...
然后在.cpp
template <typename T1> BinaryTree* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
return node;
}
Run Code Online (Sandbox Code Playgroud)
我试过看似很多的想法,但迄今为止没有.只是错误如错误C2955:'BinaryTree':使用类模板需要模板参数列表
任何建议将不胜感激.
谢谢
标记
在源文件中,您需要指定BinaryTree<T1>而不是仅仅BinaryTree.即
template <typename T1>
BinaryTree<T1>* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
return node;
}
Run Code Online (Sandbox Code Playgroud)
您只能在类/结构体中引用没有其参数列表的模板.
也当心通常这是一个坏主意,有非专业的模板.cpp文件,因为这意味着人们将无法隐式实例化它们(不包括#include荷兰国际集团的.cpp).
根据经验,只有专门的模板才能进入.cpp.非专业模板应该存在于.h.
如果您知道自己在做什么并计划手动实例化模板,那么无论如何都要将主体放入其中.cpp,但通常这不是人们所做的.