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

时间:2012-12-07 15:12:25

标签: c++ templates recursion

我正在尝试用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

1 个答案:

答案 0 :(得分:5)

这是正确的:

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

//in the second case
destroyTree<Data>(root);

也就是说,你必须指定模板参数,因为它不能由编译器从函数参数中推断出来,因为它是一个不可推导的上下文。