BST插入“表达式必须是可修改的左值”C++

问题描述:

我正在学习BST的,我遇到了这个错误。我最初有Node作为一个结构,当我直接访问左/右成员时,它工作正常。我试图让Node成为一个类,并使用accessor函数。BST插入“表达式必须是可修改的左值”C++

编辑:我正在使用一个接口,因此无法更改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); 

     } 

}

谢谢!

+0

*当我尝试分配...时出现此错误* Sooooo错误在哪里? – scohe001 2014-08-27 15:53:47

+0

帖子的标题 – Bradshawboi 2014-08-27 15:54:57

getLeftChild返回节点指针的副本。分配给它不会做任何有用的事情。

如果你希望允许分配给通过该功能节点的指针,返回一个参考:

Node*& getLeftChild() 

这可能是更清晰,提供一个setLeftChild,或者干脆露出指针作为公共成员(自反正你不提供任何封装)。或者,如果这种情况发生在可访问私人会员的会员功能中,请将其作为address->left访问。

既然我不能改变返回类型的getLeftChildgetRightChild功能我所做的:

Node* temp = dynamic_cast<Node*>(address); 
temp->left = new Node(data); 

我做了BST类的朋友节点,以便它可以访问其成员。

它看起来像添加正确,但我只是想看看是否有更好的方法来解决这个问题。