此刻此刻使我转弯。作为一项自制练习,我想在一个类中创建一个递归调用模板。在.h文件中,我有:
template <typename T1>
class BinaryTree
{
public:
BinaryTree(T1 element);
~BinaryTree();
BinaryTree* addLeftLeaf(BinaryTree<T1>* node);
等等...
然后在.cpp中
template <typename T1> BinaryTree* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
return node;
}
我似乎尝试了很多想法,但到目前为止没有任何尝试。像错误C2955这样的错误:'BinaryTree':使用类模板需要模板参数列表
任何建议,将不胜感激。
谢谢
标记
最佳答案
在源文件中,您需要指定BinaryTree<T1>
而不是BinaryTree
。即
template <typename T1>
BinaryTree<T1>* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
return node;
}
您只能在类/结构体中引用没有其参数列表的模板。
还应注意,在
.cpp
文件中具有非特化的模板通常是一个坏主意,因为这意味着人们将无法隐式实例化它们(没有#include
的.cpp
)。根据经验,
.cpp
中应仅包含专用模板。非专业模板应位于.h
中。如果您知道自己在做什么,并计划手动实例化模板,则一定要将正文放在
.cpp
中,但是通常这不是人们要做的。