関数ポインタを介したクラスオブジェクトへのアクセスが必要-バイナリ検索ツリークラス作成関連

StackOverflow https://stackoverflow.com/questions/206498

質問

再帰を使用したバイナリ検索ツリーの走査の作成。

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

関数は次のとおりです。これは明らかに間違っています。この関数は次のように呼び出されます。

first.inOrder(print_vals);

firstはオブジェクトであり、print valsは単にオブジェクト内のデータを印刷する関数です。各オブジェクトには、データ、左、右の3つの値があります。関数でこれらのアイテムに実際にアクセスするにはどうすればよいですか?

役に立ちましたか?

解決

inOrderPtr(this-> data)の呼び出しは、ツリーノードの data メンバーのみを print_vals 機能。 left および right 要素にアクセスする場合は、 inOrderPtr(* this)を使用します。これをコンパイルするには、 inOrderPtr print_vals の宣言など、さまざまな宣言を変更する必要があります。コードの残りの部分を見ずに、変更する必要があるものを言うのは困難です。

別のメモでは、再帰呼び出しを次のように書きたいと思うかもしれません:

this->left->inOrder(inOrderPtr);

ただし、実装については想定しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top