0

好吧,我正在尝试用 C++ 编写一个处理双链表的程序。具体来说,该列表包含一组艺术品对象作为其节点。在这个特定的函数中,我试图通过“sell”命令删除节点,但我在几行上收到了这个错误:

错误:需要左值作为赋值的左操作数

我已经完成了我的研究,我发现这种类型的错误通常会出现在您在实际想要比较它们时尝试分配值,或者如果您尝试将值分配给常量。但是,我不认为这是我的问题。这是问题代码:

// Sell At Function: This function sells the specified artwork.
void CR_ArtCollection::sell_at(string title, ostream& log)
{
    CR_ArtWorks* walker = first;

    while(walker != NULL)
    {
        if(title == walker->get_title())
        {
            walker->get_next()->get_prev() = walker->get_prev(); // Error
            walker->get_prev()->get_next() = walker->get_next(); // Error
            delete walker;
            walker = NULL;
        }
        else walker = walker->get_next();
    }
}

如果有人能指出我正确的方向,我将非常感激。

4

2 回答 2

2

这很明显 -get_prevget_next返回r-values。这意味着您不能分配给他们。

检查您的界面是否有类似于set_nextand的方法,set_prev并将其称为:

walker->get_next()->set_prev(walker->get_prev());
walker->get_prev()->set_next(walker->get_next());

顾名思义 - get_xxxx,这些方法在那里,所以你可以获取值,而不是设置它们。

于 2012-10-21T20:53:56.370 回答
0

好吧,如果函数返回原始类型,例如整数或指针,则分配给函数的结果是不合法的。这就是你的错误。

一种可能性是更改您的 get_prev 和 get_next 函数以返回对指针的引用。

但我不建议你这样做。您的代码显然需要重新设计。您应该将擦除功能添加到您的链表类。这样,指针操作代码将位于它所属的 CR_ArtWorks 类中,而不是它不属于的 CR_ArtCollection 类中。

于 2012-10-21T20:56:30.820 回答