c++ - 模板化递归函数的语法是什么?

标签 c++ templates recursion

此刻,这让我陷入困境。作为一个自制练习,我想在一个类中模板化一个递归调用。在 .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/

相关文章:

c++ - 什么先来 - 模板实例化与宏扩展?

java - 连续分数

java - 递归打印方法

c++ - 需要有关反转输入的递归程序的帮助

C++如何将 map 迭代器仅公开给 map 的值

c++ - 如何根据模板类型的祖先限制类的实例化

c++ - 在 C++ 中接受语法

c++ - MFC TreeView 控件 : looking for a foolproof way to deal with data

c++ - 自定义堆分配器 - 分配的对象必须指向分配器?

c++ - 在二维数组中找到一个值并将其移动到另一个二维数组