此刻,这让我绕过弯道。作为一个自制练习,我想模拟一个类中的递归调用。在.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':使用类模板需要模板参数列表
任何建议都会受到赞赏。
由于
标记
答案 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)
返回类型不完整,它也需要模板参数。