[英]Subscript Operator Overloading Error
這是我的雙向鏈接列表類中的一個函數,但是每次編譯時,我都會收到以下消息:“無效的初始化類型為'int&'的非const引用是從類型為'int'的臨時初始化的。我只是無法獲取還有其他方法。
int& LinkedList::operator[](int index)
{
Node* current = head_;
for(int i = 0; i < index; i++){
current = current->getNextNode();
}
return(current->getValue()); // getValue() returns an int
}
提前致謝!
簡單的答案: getValue
還必須返回一個int&
。
如果您希望能夠使用它來修改存儲在列表中的值,那么它將必須返回對該值的引用。 這意味着您需要使Node::getValue()
返回一個引用,或者添加另一種方式來獲取對該節點中存儲的值的引用。
如果您不想使用它來修改列表內容,則可以將返回類型更改為int
。
問題是您不能將非常量引用綁定到右值(在這種情況下,是由getValue()
函數返回的臨時值)。 如果要提供對列表中存儲的值的引用,以便調用者可以對其進行修改,則需要修改getValue()
以返回引用。
總體而言,您可能需要考慮對列表進行隨機訪問操作。 可能會誤以為它很便宜 。 例如,用戶可能嘗試遍歷列表,例如:
for (int i = 0; i < list.size(); ++i)
std::cout << list[i] << std::endl;
但是該迭代實際上是O(N ^ 2)而不是O(N)
(您應該知道,只使用std::list
... 出於某種原因不提供此操作...)
您返回int&
的原因是,寫mylist[i] = 42
人實際上將修改列表的內容。
但是,您正在使用getValue
幫助程序獲取值,該幫助程序根據錯誤消息返回一個副本。 通過分析數據類型,編譯器已找到您的邏輯錯誤。 如果希望能夠修改實際列表數據,則必須返回對實際列表數據的引用,而不是副本。
因此,正如Philipp所建議的, getValue
需要返回int&
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.