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

C++类成员函数如何返回成员变量指针?双向链表封装报错求解

问题根因

你当前实现的previous()、next()成员函数返回的是m_prev/m_next成员指针的值拷贝,属于不可修改的临时右值,无法作为赋值操作的左操作数,因此触发「表达式必须是可修改的左值」报错。

解决方案

有两种常用实现方式,可根据需求选择:

方案1:返回指针的左值引用(支持原语法直接赋值)

修改成员函数返回值类型为指针的左值引用,直接将类内部成员变量的可写引用暴露给外部,修改后你的原有赋值语句可直接运行:

// 修改对应成员函数的返回值类型
// 非const版本:返回可修改的指针引用
DoublyLinkListNode*& previous() { return m_prev; }
// const版本:返回只读的指针引用
const DoublyLinkListNode* const& previous() const { return m_prev; }

DoublyLinkListNode*& next() { return m_next; }
const DoublyLinkListNode* const& next() const { return m_next; }

修改后node->previous() = node3语句可正常执行,赋值操作会直接作用到类内部的m_prev成员上。

方案2:单独提供Setter方法(更符合封装规范)

如果不希望直接暴露内部成员的引用,更推荐单独封装设置指针的接口,这种方式可控性更强,也更符合面向对象封装的最佳实践:

// 原有getter保持不变,返回指针拷贝即可
DoublyLinkListNode* previous() { return m_prev; }
const DoublyLinkListNode* previous() const { return m_prev; }
// 新增setter接口
void set_previous(DoublyLinkListNode* prev_node) { m_prev = prev_node; }

DoublyLinkListNode* next() { return m_next; }
const DoublyLinkListNode* next() const { return m_next; }
void set_next(DoublyLinkListNode* next_node) { m_next = next_node; }

调用时将原有赋值语句改为node->set_previous(node3);即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:54:03