Skip to main content
 首页 » 编程设计

C++ 二叉搜索树模板从函数返回节点

2024年05月22日15kenshinobiy

我有以下 BinaryTree 类,其中包含一个名为 Node 的私有(private)类(我省略了除此问题所需之外的所有内容):

template<typename T> 
class BinaryTree{ 
private: 
    template<typename NT> 
    class Node{ 
    public: 
        Node<NT>* left; 
        Node<NT>* right; 
        NT item; 
    }; 
public: 
    Node<T> Find(T itemToFind); 
}; 
 

这是相当标准的。我正在尝试实现返回 Node 对象的 Node FindMax() 函数,但我无法弄清楚如何定义它。例如,我(错误地)认为这就足够了:

template<typename T> 
Node<T> BinaryTree<T>::Find(T itemToFind){ // -------> error line 
    //...do something.... 
} 

但我收到一条错误消息:没有名为 Node 的模板。我尝试过各种其他组合但无济于事。我不想返回 bool 如果找到,我想返回 Node 本身。

请您参考如下方法:

您需要添加作用域运算符 ::,因为 Node 类是 BinaryTree 类的一部分:

template<typename T> 
BinaryTree<T>::Node<T> BinaryTree<T>::Find(T itemToFind) { 
    //...do something.... 
} 

C++14 引入了 auto 返回类型,因此以下内容也将起作用:

template<typename T> 
auto BinaryTree<T>::Find(T itemToFind) { 
    //...do something.... 
}