2015-04-29 38 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