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

获取右值地址警告问题:类getter返回值取址报错

问题原因与解决方法

问题根源

你的getMpuTest()方法返回的是mpuTest成员变量的副本——也就是一个临时创建的右值对象。右值是临时存在的,没有持久的内存地址,所以编译器不允许你用&取它的地址,这就是报错taking address of rvalue的原因。

两种可行解决办法

方法一:让getter返回引用

修改Test3类的getMpuTest方法,让它返回原成员变量的引用(左值),这样就能合法获取地址:

class Test3 {
private:
    mpu mpuTest;
public:
    // 返回引用,而非副本
    mpu& getMpuTest() {
        return mpuTest;
    }
};

这样&test3Var.getMpuTest()拿到的就是test3Var内部mpuTest成员的真实内存地址,是合法的左值,不会触发错误。

⚠️ 注意:要保证test3Var的生命周期比fsVar长,否则fs类里保存的指针会变成野指针,访问时会触发未定义行为。

方法二:新增获取指针的方法

如果不想暴露成员的引用(比如担心外部直接修改成员变量),可以在Test3里专门加一个返回指针的方法:

class Test3 {
private:
    mpu mpuTest;
public:
    mpu getMpuTest() {
        return mpuTest;
    }
    // 新增方法返回成员的指针
    mpu* getMpuTestPtr() {
        return &mpuTest;
    }
};

然后在main里调用这个方法传参:

fsVar.initialize(test3Var.getMpuTestPtr());

这样既保留了原getter的封装性,又能合法传递成员变量的地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:21