首页 > 解决方案 > 我想在 C++ 中对单链表进行冒泡排序,但我一直面临左值错误,我无法解决它

问题描述

这是可能帮助您理解我的问题的代码,我正在使用节点类和列表类。这是错误:[Error] lvalue required as left operand of assignment。任何帮助,将不胜感激..!!

class Node{
    private:
        int data;
        Node* next;
    public:
        void SetNext(Node* next){
            this->next=next;
        }
        void SetData(int data){
            this->data=data;
        }
        Node* GetNext(){
            return next;
        }
        int GetData(){
            return data;
        }
};
class List{
    private:
        Node *CurrentLocation;
    public:
        List(){
            CurrentLocation=NULL;
        }
    void SortList(){

            Node *t1,*t2;
            int temp;
            for(t1=CurrentLocation;t1!=NULL;t1=t1->GetNext()){
                for(t2=CurrentLocation;t2!=NULL;t2=t2->GetNext()){
                    if(t2->GetData()>t1->GetNext()->GetData()){
                        temp=t2->GetData();
                        t2->GetData()=t2->GetNext()->GetData();
                        t2->GetNext()->GetData()=temp;
                    }
                }
            }
        }
};

标签: c++sortingdata-structureslinked-listbubble-sort

解决方案


您正在尝试分配给rvalue. 这rvalue是您数据的临时副本。不是原来的。一旦表达式执行,它将被销毁,因此你不能分配给它。

要分配给您的数据,您必须返回对它的引用,如下所示

int& GetData(){
    return data;
}

正如 user4581301 所提到的,我建议你看看这个什么是右值、左值、xvalues、glvalues 和 prvalues?

前面的描述是针对问题本身的,但最好为你的数据编写一个设置器,比如你的 getter,如下所示

void setData(int newData){
    data = newData;
}

推荐阅读