所以,我有一个函数,预订处理,这意味着在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);
}
不幸的是,当我从main函数中调用该类时,我收到一个错误。调用是preorder_processing(root_ptr,print);实际的'print'功能是:
template<class Item>
void print(Item a)
{
cout << a << endl;
}
错误是:
bstNode.cxx:23:错误:没有用于调用的匹配函数 “
preorder_processing(bstNode<int, long unsigned int>* <unresolved overloaded function type>)
”
有谁知道发生了什么事?
答案 0 :(得分:0)
您的root->left()
和root->right()
应该返回bstNode<Item, Key>*
,这是右值指针。您不能将非const引用分配给临时指针变量。
如下所示更改声明,编译器错误应该是:
void preorder_processing(bstNode<Item, Key>* root, Process f)
// removed reference ^^^
此外,调用函数时,第二个参数Process f
不会传递任何值:
preorder_processing(root->left(), ???);