0

この関数は二分木クラスの中にあります

/***********************
 *
* give preorder of tree
*
* ********************/

void preorder(Node * node, std::ostream &p_str){
    if(node != NULL){

            //p_str << node->Data() << " ";

            if(node->m_ll) {

                    preorder(node->m_ll, &p_str);

            }

            if(node->m_rl) {

                    preorder(node->m_rl, &p_str);
            }
    }
 }

ここでクラスの外で呼び出しを行います。ルートから始めて、ツリーを再帰的にトラバースする

void preorder(Node * node, std::ostream &p_str){
    if(node != NULL){

            //p_str << node->Data() << " ";

            if(node->m_ll) {

                    preorder(node->m_ll, &p_str);

            }

            if(node->m_rl) {

                    preorder(node->m_rl, &p_str);
            }
    }
 }

次のようなエラーが発生します

Tree.h:337: error: no matching function for call to       'CTree<int>::preorder(CTree<int>::Node*&, std::ostream*)'
Tree.h:330: note: candidates are: void CTree<T>::preorder(CTree<T>::Node*, std::ostream&) [with T = int]
 Tree.h:343: error: no matching function for call to 'CTree<int>::preorder(CTree<int>::Node*&, std::ostream*)'
 Tree.h:330: note: candidates are: void CTree<T>::preorder(CTree<T>::Node*, std::ostream&) [with T = int]

私が見落としているかなり単純なことについて何か考えはありますか?

4

3 に答える 3

0

ostreamアドレスオブジェクトを渡す必要はありません。関数はポインタではなく参照を取ります:

preorder(node->m_rl, p_str);
于 2013-02-16T00:48:48.973 に答える
0

関数は参照による引数を期待しています&p_strが、ポインターです。

を呼び出すだけpreorder(node->m_ll, p_str);です。

于 2013-02-16T00:48:48.983 に答える
0

preorder(node->m_ll, &p_str);する必要がありますpreorder(node->m_ll, p_str);

于 2013-02-16T00:49:15.283 に答える