2012-05-04 131 views
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: error: no matching function for call to ‘ preorder_processing(bstNode<int, long unsigned int>* <unresolved overloaded function type>)

有誰知道這是怎麼回事?

+0

你需要給'inorder_processing()'函數的聲明。什麼是print()函數呢? – iammilind

+0

哎呀,我有兩個相同的錯誤消息,類似的功能,並張貼錯誤的。我的錯。它的preorder_processing()不在錯誤消息中。 – vanchagreen

回答

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(), ???); 
+0

這是有道理的,我會保持它,但恐怕它不能解決我們的問題。事實上,沒有改變任何事情。完全相同的錯誤。 – vanchagreen

+0

@vanchagreen,檢查了我的答案中所述的Process f'參數? – iammilind

+0

對不起,我把它解決了一次,永遠不會放回去。:\但是,是的,仍然沒有工作。它在第一次調用函數時崩潰了。它永遠不會進入它。 – vanchagreen

相關問題