2012-10-21 41 views
0

好的,我試圖用C++編寫一個處理雙鏈表的程序。具體來說,該列表包含作爲其節點的藝術品對象的集合。在這個特殊的功能,我想通過「賣」命令來刪除節點,但我發現了幾行這樣的錯誤:C++鏈接列表錯誤:作爲左操作數的賦值所需的左值

錯誤:左值要求作爲分配

我已經離開操作做了我的研究,並且發現這種類型的錯誤通常會在您想要比較它們時嘗試分配值或嘗試將值分配給常量時出現。但是,我不認爲這是我的問題。這裏的問題代碼:

// 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(); 
    } 
} 

如果任何人都可以指出我在正確的方向,我會非常感激。

+0

你能至少說出編譯器在抱怨哪一行嗎? –

回答

2

這是相當明顯的 - get_prevget_next返回r值。這意味着你不能分配給他們。

檢查您的界面類似於set_nextset_prev的方法,並調用它爲:

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

如名稱 - get_xxxx,這些方法都存在這樣你就可以得到值,不能同時設置他們。

+0

這樣做,謝謝!它現在工作完美。 –

+1

@ CliftonRoberts所以你實際上有'set_prev'和'set_next'函數? –

0

好的,如果一個函數返回一個基本類型,例如整數或指針,那麼分配給該函數的結果是不合法的。這是你的錯誤。

一種可能性是改變你的get_prev和get_next函數來返回對指針的引用。

但我不建議你這樣做。您的代碼顯然需要重新設計。你應該添加一個擦除函數給你的鏈表類。這樣,指針操作代碼將位於它所屬的CR_ArtWorks類中,而不是CR_ArtCollection類。

相關問題