c++ - 返回指向成员变量的指针?
问题描述
我试图为我的链表节点类实现封装,但似乎我做错了什么。如何让函数返回指向类内成员变量的指针?
template <typename T>
class DoublyLinkListNode
{
public:
using value_type = T;
using reference = value_type&;
using const_reference = const value_type&;
using size_type = size_t;
DoublyLinkListNode() :m_value(value_type()), m_prev(nullptr), m_next(nullptr) {}
DoublyLinkListNode(const_reference p_value) : m_value(p_value), m_prev(nullptr), m_next(nullptr) {}
DoublyLinkListNode(const_reference p_value, DoublyLinkListNode* p_prev, DoublyLinkListNode* p_next) : m_value(p_value), m_prev(p_prev), m_next(p_next) {}
DoublyLinkListNode(value_type&& p_value, DoublyLinkListNode* p_prev, DoublyLinkListNode* p_next) : m_value(p_value), m_prev(p_prev), m_next(p_next) { p_value = value_type(); }
// Dereference that allows us to write/read into Elem.
reference operator*() { return m_value; }
const_reference operator*() const { return m_value; }
DoublyLinkListNode* previous() { return m_prev; }
//const DoublyLinkListNode* previous() const { return m_prev; }
DoublyLinkListNode* next() { return m_next; }
//const DoublyLinkListNode* next() const { return m_next; }
private:
DoublyLinkListNode* m_prev; // previous link.
DoublyLinkListNode* m_next; // succesor (next) link.
T m_value;
};
int main()
{
DoublyLinkListNode<double>* node = new DoublyLinkListNode(5.5);
DoublyLinkListNode<double> node2(5.5);
DoublyLinkListNode<double>* node3 = new DoublyLinkListNode(5.5);
// expression must be a modifiable lvalue?
node->previous() = node3;
std::cout << node->operator*() << std::endl;
return 0;
}
解决方案
“如何让函数返回指向类内成员变量的指针?”
你说的是m_prev
。的类型m_prev
是DoublyLinkListNode*
。指向此变量的指针具有类型DoublyLinkListNode**
。该函数必须返回DoublyLinkListNode**
:
DoublyLinkListNode** previous() { return &m_prev; }
你可以用它作为
*(node->previous()) = node3;
但是 C++ 方法是返回引用而不是指针:
DoublyLinkListNode*& previous() { return m_prev; }
你可以用它作为
node->previous() = node3;
目前的实施
DoublyLinkListNode* previous() { return m_prev; }
返回一个临时副本(R 值)。
但是,您应该公开成员,而不是 getter 和 setter 或返回指针/引用的函数:C.131:避免琐碎的 getter 和 setter
推荐阅读
- c# - WPF - xaml 的绑定在混淆后不起作用
- count - 如何获取HBASE中每个列族中的列数
- excel - 有没有办法不包含索引值,以便它可以在 Excel 中搜索下一个索引出现
- python - 根据排名替换数据框中的值
- r - 根据两个条件创建id
- c# - 使用 Microsoft.Identity.Web 1.60 调用 Microsoft Graph 时出现 System.NullReferenceException
- maximo - 使用 WOTotalSet 填充 WORKORDER 字段
- python - 我无法从内部模块文件中导入模块
- html - 如何定位
Vue3中父级CSS规则的内容? - typescript - 执行 npm run build 时如何使用 sequelize 修复此错误?