我正在尝试用c ++创建一个树类 我不确定在使用递归时我应该如何使用模板。
例如我有以下功能:
template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
if(!element) {
return;
}
destroyTree(element->getLeft());
destroyTree(element->getRight());
delete element;
}
或应该是:
template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
if(!element) {
return;
}
destroyTree<Data>(element->getLeft());
destroyTree<Data>(element->getRight());
delete element;
}
然后如果我通过以下函数调用它:
template <typename Data>
void AVLTree<Data>::function() {
destroyTree(root);
}
或:
template <typename Data>
void AVLTree<Data>::function() {
destroyTree<Data>(root);
}
我试图结合上面的大多数可能性,但我总是得到一个错误。
通常它是non matching function for call to
如果有人对此问题有一些经验,请帮助我。
谢谢。
如果我使用Nawaz的建议,我会收到以下错误:
内部构建器用于构建** g ++ -O0 -g3 -Wall -c -fmessage-length = 0 -oAVLTest.o .. \ AVLTest.cpp g ++ -oAVLTree.exe AVLTest.o AVLTest.o:在功能中 ZN15Data_Structures7AVLTreeIiE4Node7getLeftEv“: C:/用户/亚历克斯/工作区/ AVLTree /调试/../ AVLTree.h :(文本$ _ZN15Data_Structures11destroyTreeIiEEvPNS_7AVLTreeIT_E4NodeE [无效。 Data_Structures :: destroyTree(Data_Structures :: AVLTree ::节点*)] + 0X47): undefined reference toData_Structures :: AVLTree :: Node :: ~Node()' collect2:ld返回1退出状态发生构建错误,构建是 停止消耗的时间:532毫秒。
我该怎么办?
所有相关代码均为here。
答案 0 :(得分:5)
这是正确的:
//in the first case
destroyTree<Data>(element->getLeft());
destroyTree<Data>(element->getRight());
//in the second case
destroyTree<Data>(root);
也就是说,你必须指定模板参数,因为它不能由编译器从函数参数中推断出来,因为它是一个不可推导的上下文。