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

为何`node->getVoltage().isKnown = ...`表达式无法修改?

错误原因分析:expression must be a modifiable lvalue

问题的核心在于Node::getVoltage()的返回值类型:它默认返回的是VariableValue<float>的值拷贝,而不是原成员的引用。

当你调用node->getVoltage()时,程序会生成一个临时的VariableValue<float>对象(是原私有成员voltage的副本),这个临时对象属于右值——C++不允许直接修改右值的成员变量,所以执行node->getVoltage().isKnown = !node->getVoltage().isKnown;时,就会触发"expression must be a modifiable lvalue"错误。

而且退一步说,就算能修改,你两次调用getVoltage()得到的是两个完全独立的副本,修改第一个副本的isKnown,根本不会影响原Node对象里的voltage成员,完全达不到你想要的“切换原节点电压状态”的目的。


解决方法

修改Node类的getVoltage()函数,让它返回非const引用,这样调用时会直接指向原私有成员voltage,而非创建副本:

// Node类中的getVoltage函数修改为:
VariableValue<float>& getVoltage() {
    return voltage;
}

如果需要支持只读场景,可以再重载一个const版本的函数:

const VariableValue<float>& getVoltage() const {
    return voltage;
}

修改后,node->getVoltage().isKnown = !node->getVoltage().isKnown;就会直接操作原Node对象的voltage成员,不会再触发错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:45:28