我应该如何递归调用模板函数?

Ale*_*ish 4 c++ recursion templates

我正在尝试用c ++创建一个树类,我不确定在使用递归时我应该如何使用模板.

例如,我有以下功能:

template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
    if(!element) {
        return;
    }
    destroyTree(element->getLeft());
    destroyTree(element->getRight());
    delete element;
}
Run Code Online (Sandbox Code Playgroud)

或应该是:

template <typename Data>
void destroyTree(typename AVLTree<Data>::Node* element) {
    if(!element) {
        return;
    }
    destroyTree<Data>(element->getLeft());
    destroyTree<Data>(element->getRight());
    delete element;
}
Run Code Online (Sandbox Code Playgroud)

那么如果我通过以下函数调用它:

template <typename Data>
void AVLTree<Data>::function() {
    destroyTree(root);
}
Run Code Online (Sandbox Code Playgroud)

要么:

template <typename Data>
void AVLTree<Data>::function() {
    destroyTree<Data>(root);
}
Run Code Online (Sandbox Code Playgroud)

我试图结合上面的大多数可能性,但我总是得到一个错误.通常它是一个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:/ Users/Alex/workspace/AVLTree/Debug /../ AVLTree.h :(.text $ _ZN15Data_Structures11destroyTreeIiEEvPNS_7AVLTreeIT_E4NodeE [void Data_Structures :: destroyTree(Data_Structures :: AVLTree :: Node*)] + 0x47):undefined reference toData_Structures: :AVLTree :: Node :: ~Node()'collect2:ld返回1退出状态发生构建错误,构建停止耗用时间:532 ms.

我该怎么办?

所有相关代码都在这里.

Naw*_*waz 5

这是对的:

//in the first case
destroyTree<Data>(element->getLeft());
destroyTree<Data>(element->getRight());

//in the second case
destroyTree<Data>(root);
Run Code Online (Sandbox Code Playgroud)

也就是说,您必须指定模板参数,因为编译器无法从函数参数中推断出它,因为它是一个不可推导的上下文.