0

このコードに問題があります。確実に交換中です。

行:curr->Data() = nextEl.Data()次のエラーが表示されます:

「式は変更可能な左辺値でなければなりません」

どんな助けでも大歓迎です。前もって感謝します。私のバブルソートアルゴリズムのコードは次のとおりです。

class Node
{
private:
    int data;
    Node* next;
public:
    Node() {};
    void Set(int d) { data = d;};
    void NextNum(Node* n) { next = n;};
    int Data() {return data;};
    Node* Next() {return next;};
};

class LinkedList
{
    Node *head;
public:
    LinkedList() {head = NULL;};
    virtual ~LinkedList() {};
    void Print();
    void AddToTail(int data);
    void SortNodes();
};


void LinkedList::SortNodes() 
{
Node *curr = head;
Node *nextEl = curr ->Next();
Node *temp = NULL;

if(curr == NULL)
    cout <<"There is nothing to sort..."<< endl;
else if(curr -> Next() == NULL)
    cout << curr -> Data() << " - " << "NULL" << endl;
else
{
    for(bool swap = true; swap;)
    {
        swap = false;
        for(curr; curr != NULL; curr = curr ->Next())
        {
            if(curr ->Data() > nextEl ->Data())
            {
                temp = curr ->Data();
                curr ->Data() = nextEl ->Data();          
                nextEl ->Data() = temp;
                swap = true;
            }
            nextEl = nextEl ->Next();
        }
    }
}
curr = head;
do
{
    cout << curr -> Data() << " - ";
    curr = curr -> Next();
}
while ( curr != NULL);
cout <<"NULL"<< endl;
}
4

3 に答える 3

1

それは間違っている。関数によって返される一時変数の値を変更することはできません。

しかし、あなたはそれをこのように機能させることができます..

int& Data() {return data;};

これは良い習慣ではありませんが。代わりに、あなたが持っているセッターを使用してください..

curr->Set(nextEl->Data());
于 2012-07-19T22:31:19.867 に答える
0

変化する

curr ->Data() = nextEl ->Data(); 
nextEl ->Data() = temp;

curr->Set(nextEl ->Data()); 
nextEl->Set(temp);
于 2012-07-19T23:42:14.007 に答える
0

ステートメント

curr->Data() = nextEl.Data();

関数の戻り値に何かを割り当てようとしています。ノードをどのように定義したかはわかりませんが、おそらく次のような意味でした

curr->Data = nextEl.Data();

つまり、ノードのメンバーに何かを割り当てます。

于 2012-07-19T22:27:38.013 に答える