では、2 つの異なる機能があるとします。1 つは BST クラスの一部で、もう 1 つはその Class 関数を呼び出す単なるヘルパー関数です。ここにそれらをリストします。
sieve(BST<T>* t, int n);
この関数は次のように呼び出されます: sieve(t,n) オブジェクトは BST t と呼ばれます。
特定のオブジェクトを削除するために、sieve 関数内でクラス削除関数を使用します。この基本機能のプロトタイプがどのように見えるべきかわかりませんか? これを行う:
sieve(BST<int> t, int n)
ここで何が起こるかというと、すべてが正常にコンパイルされますが、t.remove 関数が呼び出されると、実際の結果は表示されません。main() 関数からオブジェクトを渡すのではなく、コピーまたは他の t オブジェクト全体を作成しているだけなので、私は推測しています。
元のオブジェクトが作成されたメイン関数で削除関数 (t.remove(value)) を呼び出すと、すべてが適切に削除されます。ふるい機能を使用して開始すると、メイン機能から再印刷しても変化が見られません。したがって、私のメイン関数は次のようになります。
int main ()
{
int n,
i,
len;
BST<int> t;
cin >> n;
vector<int> v(n);
srand(1);
for (i = 0; i < n; i++)
v[i] = rand() % n;
for (i = 0; i < n; i++)
t.insert(v[i]);
print_stat(t);
t.inOrder(print_data);
sieve(v,t,n);
print_stat(t);
t.inOrder(print_data);
return 0;
}
したがって、関数内のデバッグステートメントが実際に何かを削除していることを示していても、結果は同じになります。私が間違っているのは、関数に t オブジェクトを渡す方法だと思います。