2011-09-14 123 views
0

我想實現一個簡單的LinkedList 下面的代碼返回一個指針,產生這個錯誤:分配給一個函數調用

error: lvalue required as left operand of assignment 

該生產線是:

newNode->getNext() = _head; 

getNext()返回一個Node*,並且我正在嘗試在更新它之前在當前頭部創建新的Node點。 我可能正在考慮在Java中進行錯誤的轉換。

+0

沒有你的實現它只是猜測... – mbx

+0

避免使用變量名的前導下劃線,因爲它們是爲編譯器使用而保留的。你可能會跺腳,只有花一個星期的時間才能發現問題。早期預防:選擇不同的命名約定,如下劃線作爲後綴。 –

+0

@Thomas:僅當它位於全局名稱空間中時,或者當下劃線後面跟着大寫字母或其他下劃線時。 –

回答

2

要麼,取消引用:

Node* Node::getNext(); 
*(newNode->getNext()) = _head; 

(假設_head具有類型Node和賦值運算符,而Node小心實現),或者什麼可能是更好

Node& Node::getNext(); 
newNode->getNext() = _head; 

但無論如何,這是不是你應該這樣做的方式。你可能想要實現一個setter。

此外,你有沒有考慮使用std::list而不是重新發明輪子?

+0

我選擇了第二個。 _next是Node *的類型,所以我必須返回* _next才能工作。 但我不明白爲什麼它需要如此。 – SnapDragon

0

你在左邊放置一個函數調用,你真的不能這樣做。你確定你的意思不是...

_head = newNode->getNext(); 
+2

或newNode-> setNext(_head); (不知道這是否有效,但你明白了) – mydogisbox

+0

假設這樣的功能存在,是的。 – MGZero

+2

回覆:「你正在將函數的返回值設置爲_head,這是你實際上無法做到的。」沒有理由斷定這不能在這裏完成。 –

0

你需要在'='符號的左邊有你要分配的變量。

_head = newNode->getNext();

再次看完後,它並沒有真正實現你想要的。我建議實現一個「setNext」函數,它將一個節點作爲參數,或者直接訪問「下一個」變量。 newNode.next = _head;例如。

4

既然你實現類,你有幾種選擇:

  1. 實現setNext(Node*)方法(可能private),並使用newNode.setNext(_head);
  2. 直接指定給節點的_next成員:newNode._next = _head;
  3. 使Node的構造函數初始值爲_next作爲參數,並在構造newNode時通過_head

由於您沒有發佈您的代碼,我猜測了「下一個」指針的名稱,並將其命名爲_next。而且,上面的1-3點不是相互排斥的,也不是唯一的可能性。

P.S.如果您不確定「左值」和「右值」是什麼意思,請查看C FAQ

相關問題