我正在了解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身份访问它。

10-07 12:28