0

そのため、bst の各ノードの各アイテムに対して関数 f を実行することを目的とした関数 preorder processing があります。機能は次のとおりです。

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); です。実際の関数「print」は次のとおりです。

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

エラーは次のとおりです。

bstNode.cxx:23: エラー: '<code>preorder_processing(bstNode<int, long unsigned int>* <未解決のオーバーロードされた関数の型>)' の呼び出しに一致する関数がありません</p>

誰が何が起こっているのか知っていますか?

4

1 に答える 1

0

あなたroot->left()右辺値ポインタであるをroot->right()返す必要があります。非 const 参照を一時ポインター変数に割り当てることはできません。bstNode<Item, Key>*

宣言を次のように変更すると、コンパイラ エラーが発生するはずです。

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

さらに、Process f関数を呼び出すときに、2 番目のパラメーターには値が渡されません。

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