簡體   English   中英

下標運算符重載錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM