gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:59 25 4
gpt4 key购买 nike

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

我已经尝试结合上面的大部分可能性,但我总是会出错。通常它是一个调用的非匹配函数

如果有人对此问题有经验,请帮助我。

谢谢。

如果我使用 Nawaz 的建议,我会收到以下错误:

Internal Builder is used for build ** g++ -O0 -g3 -Wall -c -fmessage-length=0 -oAVLTest.o ..\AVLTest.cpp g++ -oAVLTree.exe AVLTest.o AVLTest.o: In function 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 returned 1 exit status Build error occurred, build is stopped Time consumed: 532 ms.

我能用它做什么?

所有相关代码都是here .

最佳答案

这是正确的:

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

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

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

关于c++ - 我应该如何递归调用模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com