c++ - 具有二叉搜索树的类函数中的模板语法

标签 c++ templates

<分区>

所以我试图将我之前创建的基于 int 的二叉搜索树转换为模板二叉搜索树。我正在为如何输入我的 .cpp 文件而苦恼。

在我的 .h 文件中我有:

template <typename T>
class BST
{
private:        
    struct node
    {
        T m_data;
        node* m_left;
        node* m_right;
    };

    node* m_root;
    void AddLeafPrivate(const T& x, node* Ptr);
    void PrintInOrderPrivate(node* Ptr);
    node* ReturnNodePrivate(const T& x, node* Ptr);
    T FindSmallestPrivate(node* Ptr);
    void RemoveNodePrivate(const T& x, node* parent);
    void RemoveRootMatch();
    void RemoveMatch(node* parent, node* match, bool left);
    node* CreateLeaf(const T& x);
    node* ReturnNode(const T& x);
    void RemoveSubtree(node* Ptr);
public:
    BST();
    ~BST();
    void AddLeaf(const T& x);
    void PrintInOrder();
    T ReturnRootKey();
    void PrintChildren(const T& x);
    T FindSmallest();
    void RemoveNode(const T& x);
};

在我的 .cpp 文件中,我遇到以下函数的错误:

template <typename T>
template BST<T> :: node* BST<T>::ReturnNode(const T& x)
{
  return ReturnNodePrivate(x, m_root);
}

template <typename T>
template BST<T> :: node* BST<T> :: ReturnNodePrivate(const T& x, node* Ptr)
{
if(Ptr != NULL)
{
    if (Ptr -> m_data == x)
    {
        return Ptr;
    }
    else 
    {
        if (x < Ptr -> m_data)
        {
            return ReturnNodePrivate(x, Ptr -> m_left);
        }
        else 
        {
            return ReturnNodePrivate(x, Ptr -> m_right);
        }       
    }
}
else
{
    return NULL;
}
}

我对每个函数都遇到了相同的 4 个错误,我很困惑自己做错了什么。

  • error: expected '<' before 'BST' for template BST<T>
  • error: 'T' was not declared in this scope
  • error: template argument 1 is invalid
  • error: expected initializer before '*' token

对我做错了什么有什么建议吗?

最佳答案

您似乎错误地输入了两次 template,而不是 typename。例如,它应该是:

template <typename T>
typename BST<T>:: node* BST<T>::ReturnNode(const T& x)

代替:

template <typename T>
template BST<T>:: node* BST<T>::ReturnNode(const T& x)

关于c++ - 具有二叉搜索树的类函数中的模板语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513327/

相关文章:

c++ - 如何加载 DLL 并访问其方法

c++ - C++ 中 Delete 的行为

c++ - 完成虚拟继承

email - 是否可以为 mailchimp 编写拖放模板?

c++ - 跨动态库的静态*模板*类成员

c++ - 未解析的模板参数

c++ - 如何使用 CreateProcess 执行简单的命令行?

c++ - GDI+图像类问题

c++ - 打印多种不同类型的数字限制

django - 防止 Django 模板中的整数出现 NUMBER_GROUPING