所以我們假設我有兩個不同的函數。一個是BST類的一部分,另一個只是一個幫助函數,它將調用該類的函數。我會在這裏列出來。將一個Class對象傳遞給一個函數(可能通過指針而不是引用)C++
sieve(BST<T>* t, int n);
這個函數被這樣調用:sieve(t,n)該對象被稱爲BST t;
我將使用sieve函數中的類remove函數來移除特定的對象。我不確定這個基本功能的原型應該是什麼樣子?這樣做:
sieve(BST<int> t, int n)
這裏會發生什麼事是一切編譯得很好,但是當t.remove函數被調用我看不出有什麼實際效果。我假設,因爲它只是創建一個副本或整個其他t對象,而不是從我的main()函數傳遞一個。
如果我在創建原始對象的主函數中調用remove函數(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對象傳遞給函數。
在你的第二個代碼塊中,你有兩個< and one > – John 2008-10-30 19:05:15