我有一个模板化的红黑树类:
template<class T>
class RBTree
{
public:
RBTree();
~RBTree();
void insert(T key); // Insert node, key is the key value, external interface
void remove(T key); // Delete the node of the key
RBTNode<T>* search(T key);
void print();
void preOrder(); // Pre - order traversal Print red black tree
void inOrder(); //Intermediate traversal
void postOrder(); // Post - order traversal
private:
void leftRotate(RBTNode<T>* &root, RBTNode<T>* x);// left-handed
void rightRotate(RBTNode<T>* &root, RBTNode<T>* y);// right handed
void insert(RBTNode<T>* &root, RBTNode<T>* node);// insert node, internal interface
void InsertFixUp(RBTNode<T>* &root, RBTNode<T>* node);
void destory(RBTNode<T>* &node);
void remove(RBTNode<T>*& root, RBTNode<T>*node); // Delete the node as KEY
void removeFixUp(RBTNode<T>* &root, RBTNode<T>* node, RBTNode<T>*parent);
RBTNode<T>* search(RBTNode<T>*node, T key) const;
void print(RBTNode<T>* node)const;
void preOrder(RBTNode<T>* tree)const;
void inOrder(RBTNode<T>* tree)const;
void postOrder(RBTNode<T>* tree)const;
private:
RBTNode<T>*root;
};
我想允许一些函数,例如,insert()
带模板带第二个参数,即将类内部函数的声明更改为
template<class T,typename R>
void insert(T key,R info);
不以任何方式更改课程的开头:
template<class T>
class RBTree
{
public:
...
因此,在函数定义中,改为:
template<class T> //insert
void RBTree<T>::insert(T key)
{
RBTNode<T>*z = new RBTNode<T>(key, Red, NULL, NULL, NULL);
insert(root, z);
};
这个 :
template<class T,class R> //insert
void RBTree<T>::insert(T key,R info)
{
RBTNode<T>*z = new RBTNode<T>(key, Red, NULL, NULL, NULL,info);
insert(root, z);
};
但由于这样的错误,我无法这样做 - 没有与给定类型对应的重载函数“RBTree::insert”的实例
甚至有可能做到这一点吗?如果是这样,怎么做?
PS:别忘了它还
RBTNode
必须有一个模板构造函数。它的语法类似。