関数ポインタを介したクラスオブジェクトへのアクセスが必要-バイナリ検索ツリークラス作成関連
-
03-07-2019 - |
質問
再帰を使用したバイナリ検索ツリーの走査の作成。
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);
ただし、実装については想定しています。
所属していません StackOverflow