我的两个递归函数都出现以下错误。我似乎无法自己找到问题。如果有人可以帮助我,我很感激。
错误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);
}
答案 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);
}