我想實現一個簡單的LinkedList 下面的代碼返回一個指針,產生這個錯誤:分配給一個函數調用
error: lvalue required as left operand of assignment
該生產線是:
newNode->getNext() = _head;
凡getNext()
返回一個Node*
,並且我正在嘗試在更新它之前在當前頭部創建新的Node
點。 我可能正在考慮在Java中進行錯誤的轉換。
我想實現一個簡單的LinkedList 下面的代碼返回一個指針,產生這個錯誤:分配給一個函數調用
error: lvalue required as left operand of assignment
該生產線是:
newNode->getNext() = _head;
凡getNext()
返回一個Node*
,並且我正在嘗試在更新它之前在當前頭部創建新的Node
點。 我可能正在考慮在Java中進行錯誤的轉換。
要麼,取消引用:
Node* Node::getNext();
*(newNode->getNext()) = _head;
(假設_head
具有類型Node
和賦值運算符,而Node
小心實現),或者什麼可能是更好
Node& Node::getNext();
newNode->getNext() = _head;
但無論如何,這是不是你應該這樣做的方式。你可能想要實現一個setter。
此外,你有沒有考慮使用std::list
而不是重新發明輪子?
我選擇了第二個。 _next是Node *的類型,所以我必須返回* _next才能工作。 但我不明白爲什麼它需要如此。 – SnapDragon
你在左邊放置一個函數調用,你真的不能這樣做。你確定你的意思不是...
_head = newNode->getNext();
或newNode-> setNext(_head); (不知道這是否有效,但你明白了) – mydogisbox
假設這樣的功能存在,是的。 – MGZero
回覆:「你正在將函數的返回值設置爲_head,這是你實際上無法做到的。」沒有理由斷定這不能在這裏完成。 –
你需要在'='符號的左邊有你要分配的變量。
_head = newNode->getNext();
再次看完後,它並沒有真正實現你想要的。我建議實現一個「setNext」函數,它將一個節點作爲參數,或者直接訪問「下一個」變量。 newNode.next = _head;例如。
既然你實現類,你有幾種選擇:
setNext(Node*)
方法(可能private
),並使用newNode.setNext(_head)
;_next
成員:newNode._next = _head
;_next
作爲參數,並在構造newNode
時通過_head
。由於您沒有發佈您的代碼,我猜測了「下一個」指針的名稱,並將其命名爲_next
。而且,上面的1-3點不是相互排斥的,也不是唯一的可能性。
P.S.如果您不確定「左值」和「右值」是什麼意思,請查看C FAQ。
沒有你的實現它只是猜測... – mbx
避免使用變量名的前導下劃線,因爲它們是爲編譯器使用而保留的。你可能會跺腳,只有花一個星期的時間才能發現問題。早期預防:選擇不同的命名約定,如下劃線作爲後綴。 –
@Thomas:僅當它位於全局名稱空間中時,或者當下劃線後面跟着大寫字母或其他下劃線時。 –