此刻,这让我陷入困境。作为一个自制练习,我想在一个类中模板化一个递归调用。在 .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
ing .cpp
)。
根据经验,.cpp
中只应包含专门的模板。 .非专用模板应位于 .h
中.
如果您知道自己在做什么并计划手动实例化模板,那么请务必将主体放在 .cpp
中,但通常人们不会这样做。
关于c++ - 模板化递归函数的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8919206/