0

所以,我有一个函数,预购处理,这意味着在 bst 的每个节点中的每个项目上执行函数 f。功能如下:

template <class Item, class Key, class Process>
void preorder_processing(bstNode<Item, Key>*& root, Process f)
{
    if (root == NULL) return; 
    f(root);
    preorder_processing(root->left(), f); 
    preorder_processing(root->right(), f);
}

不幸的是,当我从主函数中调用该类时,出现错误。调用是 preorder_processing(root_ptr, print); 实际功能“打印”是:

template<class Item> 
void print(Item a) 
{
    cout << a << endl;
}

错误是:

bstNode.cxx:23: 错误: 没有匹配函数调用 '<code>preorder_processing(bstNode<int, long unsigned int>* <unresolved overloaded function type>)'</p>

有谁知道发生了什么?

4

1 回答 1

0

您的root->left()androot->right()应该返回bstNode<Item, Key>*它是一个rvalue 指针。您不能将非常量引用分配给临时指针变量。

如下更改声明,编译器错误应该是:

void preorder_processing(bstNode<Item, Key>* root, Process f)
                 //    removed reference  ^^^

此外,Process f调用函数时,第二个参数没有传递任何值:

preorder_processing(root->left(), ???); 
于 2012-05-04T04:38:49.643 回答