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_prevそしてr値get_nextを返します。つまり、それらに割り当てることはできません。

set_nextと同様のメソッドがないかインターフェースを確認し、次の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

関数が整数やポインターなどのプリミティブ型を返す場合、関数の結果に代入することはできません。それがあなたのエラーです。

1 つの可能性は、get_prev および get_next 関数を変更してポインターへの参照を返すことです。

しかし、私はあなたがそうすることをお勧めしません。あなたのコードは明らかに再設計が必要です。リンク リスト クラスに消去関数を追加する必要があります。そうすれば、ポインタ操作コードは、所属しない CR_ArtCollection クラスではなく、所属する CR_ArtWorks クラスになります。

于 2012-10-21T20:56:30.820 に答える