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

标签 c++ templates binary-search-tree

我有以下 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....
}

关于C++ 二叉搜索树模板从函数返回节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59923201/

相关文章:

c++ - 发现逻辑错误 c++

c++ - C++ 中的高斯勒让德

c++ - 从 C/C++ 调用时,Objective C stdin/stdout 管道如何工作?

c++ - PC何时在if block 内分配static char*

c++ - 仅特化模板函数实现的一部分

algorithm - 在 BST 中找到 k 个后继者的时间复杂度

c++ - 为什么我的类模板动态分配的数组属性只能存储一项?

c# - 无法创建变量类型 'Item' 的实例,因为它没有 new() 约束

algorithm - 二进制搜索 ArrayBuffer

Java 泛型比较 |实现比较