我创建了一个带有函数的bst类,但现在我想让它使用模板。这是我的代码到目前为止添加一个节点,这是行不通的。
template <typename T>
void Tree<T>::addNode(Node<T>*& movingPtr, T newItem)
{
if (movingPtr == NULL)
{
movingPtr = new Node;
movingPtr -> data = newItem;
movingPtr -> prev = NULL;
movingPtr -> next = NULL;
}
else
{
if (movingPtr -> data > newItem)
addNode(movingPtr -> prev, newItem);
else
addNode(movingPtr -> next, newItem);
}
}
如果有人知道我在哪里可以找到已实现的模板类,请告诉我们。我犯了什么错误?我知道模板的基础知识,但是关于更高级的模板使用的信息很少,这清楚地解释了如何实现模板类和函数。
答案 0 :(得分:1)
(1)节点应为模板
template <typename T>
struct Node
{
T data;
Node *prev;
Node *next;
};
(2)类应为模板类
template <typename T>
class Tree{
public:
void addNode(Node<T>*& movingPtr, T newItem);
};
(3)使用模板类型
创建节点movingPtr = new Node<T>;
您可以尝试下面的整个测试代码:
template <typename T>
struct Node
{
T data;
Node *prev;
Node *next;
};
template <typename T>
class Tree{
public:
void addNode(Node<T>*& movingPtr, T newItem);
};
template <typename T>
void Tree<T>::addNode(Node<T>*& movingPtr, T newItem)
{
if (movingPtr == NULL)
{
movingPtr = new Node<T>;
movingPtr->data = newItem;
movingPtr->prev = NULL;
movingPtr->next = NULL;
}
else
{
if (movingPtr->data > newItem)
addNode(movingPtr->prev, newItem);
else
addNode(movingPtr->next, newItem);
}
}
int main()
{
Node<int> *n1 = new Node<int>();
n1->data = 2;
Tree<int> t;
t.addNode(n1, 1);
t.addNode(n1, 3);
return 0;
}