此刻此刻使我转弯。作为一项自制练习,我想在一个类中创建一个递归调用模板。在.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中,但是通常这不是人们要做的。

09-06 20:50