我的二叉树实现看起来像这样:
template <class T, template <class> class NodeType = BinaryTreeNode>
class BinaryTree : public Tree<T>
{
int size;
NodeType<T> *root;
public:
~BinaryTree()
{
if(root != NULL)
{
delete root;
}
}
BinaryTree()
{
this->size = 0;
this->root = NULL;
}
bool create();
bool insert(T p);
}
现在,我无法拨打BinaryTree::insert(T p)
。
如果我这样做:
bool BinaryTree<class T, template <class> class BinaryTreeNode >::insert(T data)
{
NodeType<T> *bNode = new NodeType<T>(data);
}
g ++会抛出以下错误:
BinaryTree.cxx:11:错误:模板参数2无效
实际上,我复制了代码:
template <class T, template <class> class NodeType = BinaryTreeNode>
来自某个地方,但我完全不明白。 任何人都可以告诉我如何调用这个类的函数,这个模板声明如何工作?
答案 0 :(得分:0)
现在,我无法调用BinaryTree :: insert(T p)。
我相信你混淆了一些话。您似乎没有尝试调用该功能。您正在定义该功能。
此语法对于定义模板类的成员函数无效:
bool BinaryTree<class T, template <class> class BinaryTreeNode >::insert(T data)
这是一个正确的版本:
template <class T, template <class> class NodeType>
bool BinaryTree<T, NodeType>::insert(T data)
您实施的实施会立即泄漏已分配的数据,但我认为它仍未完成。