You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体成员函数无法修改目标结构体变量的问题求助

问题原因及解决方案

你的代码问题出在函数参数的传递方式:modify函数的参数test op是值传递,当调用a.modify(b)时,程序会创建一个b的临时副本op,函数内部修改的只是这个副本的x值,原对象b完全不受影响,所以输出结果还是初始的2。

解决方案1:使用引用传递

将函数参数改为引用类型,这样函数会直接操作传入的原对象,而不是副本。修改后的代码如下:

#include <iostream>

struct test
{
    int x{};

    void modify(test& op)  // 改为引用参数
    {
        op.x = op.x + 1;
    }
};

int main()
{
    test a{};
    a.x = 1;
    test b{};
    b.x = 2;
    a.modify(b);
    std::cout << b.x << '\n';  // 输出3
    return 0;
}

解决方案2:使用指针传递

如果更习惯使用指针,也可以将参数改为指针类型,调用时传入对象的地址:

#include <iostream>

struct test
{
    int x{};

    void modify(test* op)  // 改为指针参数
    {
        op->x = op->x + 1;  // 用->访问指针指向的成员
    }
};

int main()
{
    test a{};
    a.x = 1;
    test b{};
    b.x = 2;
    a.modify(&b);  // 传入b的地址
    std::cout << b.x << '\n';  // 输出3
    return 0;
}

两种方案都能直接修改原对象b的x值,运行后会得到预期的结果3。

内容的提问来源于stack exchange,提问作者stupiddevil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:54:49