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
相关产品推荐
相关产品推荐

