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);
}
}
谢谢!
答
getLeftChild
返回节点指针的副本。分配给它不会做任何有用的事情。
如果你希望允许分配给通过该功能节点的指针,返回一个参考:
Node*& getLeftChild()
这可能是更清晰,提供一个setLeftChild
,或者干脆露出指针作为公共成员(自反正你不提供任何封装)。或者,如果这种情况发生在可访问私人会员的会员功能中,请将其作为address->left
访问。
答
既然我不能改变返回类型的getLeftChild
和getRightChild
功能我所做的:
Node* temp = dynamic_cast<Node*>(address);
temp->left = new Node(data);
我做了BST类的朋友节点,以便它可以访问其成员。
它看起来像添加正确,但我只是想看看是否有更好的方法来解决这个问题。
*当我尝试分配...时出现此错误* Sooooo错误在哪里? – scohe001 2014-08-27 15:53:47
帖子的标题 – Bradshawboi 2014-08-27 15:54:57