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.
我该怎么办?
所有相关代码都在这里.
这是对的:
//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)
也就是说,您必须指定模板参数,因为编译器无法从函数参数中推断出它,因为它是一个不可推导的上下文.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |