将模板函数传递到另一个模板函数

时间:2012-05-04 04:30:05

标签: c++ templates compiler-errors

所以,我有一个函数,预订处理,这意味着在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>)

有谁知道发生了什么事?

1 个答案:

答案 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(), ???);