0
template <typename Type>
bool Lazy_deletion_node<Type>::insert( Type const &obj ) {
    if(this == nullptr){
        Lazy_deletion_node<Type> *tmp = new Lazy_deletion_node( obj );
        this = tmp;
        return true;
    }
    else if(obj == this->retrieve()){
        if(erased){
            erased = false;
            return true;
        }
        else{
            return false;
        }
    }
    else if(obj < this->retrieve()){
        left()->insert( obj );
    } 
    else if(obj > this->retrieve()){
        right()->insert( obj );
    }
}

嘿伙计们,我正在尝试为延迟删除树进行插入,它基本上是一个二叉搜索树,除了我将节点标记为“已删除”而不是实际从树中删除它们。这是一种将新节点插入到包含对象 obj 的树中的方法。nullptr 定义为 0。

我首先测试一下指针是否指向 0。如果是,我创建一个在内部存储 obj 的节点,然后尝试使指针指向这个新创建的节点。

但是,当我尝试编译时,它给了我一个错误,即在读取 this = tmp; 的行上需要左值作为赋值的左操作数。谁能告诉我为什么会这样?

提前致谢。

4

2 回答 2

3

您不能重新分配this. 就像错误所说的那样,它不是可修改的左值。

但是,如果thisa 指向的对象具有您尝试分配的相同类型的可变字段,则可以通过this->myFieldor访问它this.myField,具体取决于它是指针还是引用。

于 2013-11-05T22:33:02.473 回答
1

"this" 是一个保留关键字,它是指向当前范围内的对象的指针(如果您熟悉 Python,则与 "self" 大致相似)。它旨在始终指向当前范围内的对象,这意味着您无法更改其值。

当你使用“this = tmp;”时你想要做什么 有点像尝试使用“false = 10;”

于 2013-11-05T22:37:48.087 回答