无法使用方法更改成员值

unable to change member value with method

本文关键字:成员 使用方法      更新时间:2023-10-16

我的 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;

我做错了什么?

您正在按值传递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:见上文。

在按引用传递和按值传递的语言中 - 如果您遇到更改的情况,然后突然更改"消失",则几乎可以肯定是传递副本而不是引用。

尝试更改原型以通过引用传入 Blob。