2015-04-29 85 views
-2

我在我的blob類中有一個名爲size的int成員,其值我嘗試在方法中更改。最初,我試圖...無法用方法更改成員值

void blob::make_union(blob parent_blob){ 
    parent=&parent_blob; 
    parent_blob.size = parent_size 
} 

然後我嘗試了一個函數,其唯一目的是改變大小的值。值得注意的是,它改變了函數中的值,如某些cout語句所驗證的。

int blob::change_size(int dat_size){ 
    size=size+dat_size; 
    return this.size; 
} 

後,使得新方法改變我的另一種方法

'void blob::make_union(blob parent_blob){ 
    parent=&parent_blob; 
    int temp = size; 
    parent_blob.size = parent_blob.change_size(temp); 
}' 

仍然沒有骰子。主要功能中的以下功能確實起作用。

if (charmatrix[m-1][n-1]==charmatrix[m][n]){ blobmatrix[m][n].make_union(blobmatrix[m-1][n-1]); blobmatrix[m-1][n-1].size=blobmatrix[m-1][n-1].size + blobmatrix[m][n].size;

我在做什麼錯?

+0

什麼是「父母」? 'parent_blob'是'make_union'函數的局部變量,所以如果在函數退出後使用'parent',那麼你遇到了很大的麻煩。 –

+0

你也應該解釋你預期會發生什麼,以及實際發生了什麼;說「沒有骰子」或「無法改變」。沒有人知道你認爲應該發生什麼,甚至你的代碼是什麼,因爲你也沒有包括產生意外行爲的代碼。 –

+0

[參見本頁](http://stackoverflow.com/help/mcve),瞭解如何發佈「無法正常工作」的代碼。 –

回答

0

您正在按值傳遞您的blob類:您正在製作blob對象的副本,這就是函數change_size正在處理的內容。

void increment_number(int i) { ++i; } 
void increment_number_ref(int& i) { ++i; } 

int main() 
{ 
    int n = 6; 
    // This takes a copy of the number, and increments that number, not the one passed in! 
    increment_number(n); 
    // n == 6 
    // This passed our object by reference. No copy is made, so the function works with the correct object. 
    increment_number_ref(n); 
    // n == 7 
    return 0; 
} 

你需要通過你的blob引用(或指針),如果你想修改該對象的值:見上面。

+0

哇!謝謝Tas!這從根本上改變了我對C++的理解! – ninjaneer12

0

在通過引用傳遞並按值傳遞的語言中 - 如果您有一種情況需要進行更改,然後突然更改「消失」,那麼幾乎可以肯定地通過複製與參考。

嘗試更改原型以通過參考傳遞blob。

+0

謝謝你,JRS。 – ninjaneer12

+0

@ninjaneer沒問題。在你掌握它之前,可能會很棘手。 – JRS