我的二进制搜索树c ++的递归函数中的错误C2784无法推导出模板参数

时间:2015-01-13 12:49:24

标签: c++ function recursion

我的两个递归函数都出现以下错误。我似乎无法自己找到问题。如果有人可以帮助我,我很感激。

错误3错误C2784:'void Insert(TreeNode *&,ItemType)':无法推断'TreeNode *&'的模板参数来自'ItemType *'

错误1错误C2784:'void Destroy(TreeNode *&)':无法推断'TreeNode *&'的模板参数来自'ItemType *'

template <class ItemType>
void Destroy(TreeNode<ItemType>*& tree)

{
    if (tree != NULL)
  {
    Destroy(tree->left);

    Destroy(tree->right);
    delete tree;

  }
}

template <class ItemType>
void Insert(TreeNode<ItemType>*& tree, ItemType item)
{
    if (tree == NULL)
    {           // Insertion place found.
        tree = new TreeNode<ItemType>;
        tree->right = NULL;
        tree->left = NULL;
        tree->info = item;
    }
    else if (item < tree->info)
    Insert(tree->left, item);                       // Insert in left subtree.
else
    Insert(tree->right, item);                      // Insert in right subtree.
}


template<class ItemType>
struct TreeNode
{
    ItemType info;
    ItemType* left;
    ItemType* right;
};


template<class ItemType>
void TreeType<ItemType>::InsertItem(ItemType item)
{
    Insert(root, item);
}


template<class ItemType>
TreeType<ItemType>::~TreeType()
{
    Destroy(root);
}

2 个答案:

答案 0 :(得分:0)

你忘记了

template <class ItemType>
Insert的定义之前

。你也忘记了Destroy的右括号之后的分号。当我修复这些错误时,根据GCC 4.9编译的东西。

答案 1 :(得分:0)

Insert / Destroy都是Helper函数。只有在我使用这些函数时才会出现错误。

template<class ItemType>
void TreeType<ItemType>::InsertItem(ItemType item)
{
    Insert(root, item);
}


template<class ItemType>
TreeType<ItemType>::~TreeType()
{
    Destroy(root);

}