我正在了解BST,并且遇到了此错误。我最初将Node作为结构体,当我直接访问左/右成员时,它可以正常工作。我试图使Node为类,并改用访问器函数。
编辑:我正在使用一个接口,所以不能更改getLeftChild()
和getRightChild()
的返回类型。
节点的实现:
#include "Node.h"
#include <iostream>
Node::Node(int dataP)
{
data = dataP;
left = NULL;
right = NULL;
}
Node::~Node()
{
}
int Node::getData()
{
return data;
}
NodeInterface* Node::getLeftChild()
{
return left;
}
NodeInterface* Node::getRightChild()
{
return right;
}
当我尝试将
address->getLeftChild()
分配给新节点时,出现此错误(请参见标题)。我添加功能的一部分:
if (data < address->getData())
{
if (address->getLeftChild() == NULL)
{
address->getLeftChild() = new Node(data);
return true;
}
else
{ //Something is there
return rAdd(address->getLeftChild(), data);
}
}
谢谢!
最佳答案
getLeftChild
返回节点指针的副本。分配给它不会做任何有用的事情。
如果要允许通过该函数分配给节点的指针,请返回引用:
Node*& getLeftChild()
提供一个
setLeftChild
或将指针公开为一个公共成员可能会更清楚(因为无论如何您都不提供任何封装)。或者,如果这在有权访问私有成员的成员函数中发生,请以address->left
身份访问它。