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

时间:2012-01-18 23:42:38

标签: 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':使用类模板需要模板参数列表

任何建议都会受到赞赏。

由于

标记

3 个答案:

答案 0 :(得分:8)

在源文件中,您需要指定BinaryTree<T1>而不是BinaryTree。即。

template <typename T1>
BinaryTree<T1>* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
    return node;
}

您只能在类/结构体中引用没有参数列表的模板。


另外要注意,在.cpp文件中使用非专业模板通常是个坏主意,因为这意味着人们将无法隐式实例化它们(没有#include .cpp .cpp })。

根据经验,只有专门的模板应该放在.h中。非专业模板应该存在于.cpp

如果您知道自己在做什么并计划手动实例化模板,那么无论如何都要将主体放在{{1}}中,但通常这不是人们所做的。

答案 1 :(得分:0)

你不能在.cpp文件中有模板函数定义,它必须在.h文件中:)

另外,Peter Alexander对于需要在源代码中编辑该函数定义是正确的,我会留下他的回答:)

答案 2 :(得分:0)

返回类型不完整,它也需要模板参数。