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

C++中外部函数修改多类对象后外部未生效的问题解决

问题原因与解决方案

你的代码核心问题在于函数参数的传递方式:setting函数使用的是值传递,调用时会将main中的object和object2完整复制一份,函数内部修改的只是这个副本,原对象不会受到任何影响,所以外部看不到修改效果。

解决方法1:引用传递(推荐)

将函数参数改为引用类型,这样函数直接操作原对象本身,不会产生副本。修改setting函数的声明与定义:

void setting(Test &object, Test2 &object2) // 参数前添加&表示引用
{
    cout << endl << "Success" << endl;
    
    object.setAttrib(1);
    object2.setCharacter('A');
    
    cout << object.getAttrib() << endl;
    cout << object2.getCharacter() << endl;
}

main中的调用代码无需修改,直接调用setting(object, object2)即可,此时函数内的修改会同步到外部原对象。

解决方法2:指针传递

如果习惯使用指针,也可以通过传递对象地址来操作原对象:

首先修改setting函数的声明与定义:

void setting(Test *object, Test2 *object2)
{
    cout << endl << "Success" << endl;
    
    object->setAttrib(1); // 指针用->访问成员方法
    object2->setCharacter('A');
    
    cout << object->getAttrib() << endl;
    cout << object2->getCharacter() << endl;
}

然后在main中调用时传递对象的地址:

setting(&object, &object2); // 用&获取对象地址

两种方法都能实现修改原对象的需求,其中引用传递更符合C++的语法习惯,代码更简洁直观。

内容的提问来源于stack exchange,提问作者John Taylor tayj22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:43