2017-05-08 49 views
0

我一直在困難的時間包圍指針和鏈表。我可以看到這些類型的問題在這裏經常被問到,所以我很抱歉加入到這個論壇的泥潭​​中。然而,我一直試圖將這項任務包裝兩天,而我似乎無法得到它。鏈接列表值的C++複製構造函數,而不是地址

我應該指出這是一項家庭作業!

我有一個項目,其中我必須複製鏈表,銷燬舊列表並保留值。我幾乎必須通過引用將整個列表傳遞給拷貝構造函數,而不僅僅是一個節點。

我已經看到了一些真正偉大的反應已經在這裏做了一些挖後,和最近我看到一個解決方案,我需要實現的是這一個:

Coding a function to copy a linked-list in C++

當我嘗試實現類似的代碼,以我的,它給我這個錯誤在編譯:錯誤:一元的無效類型參數「*」(有「詮釋」)鏈表

下面的代碼:

IntList::IntList(const IntList &a){ 
    if(a.head != NULL) 
    { 
      ListNode *thisNode = a.head; 
      ListNode *nextN = NULL; 

      while(thisNode != NULL) 
      { 
        ListNode *newNode = new ListNode; 
        newNode->value = (*thisNode->value); //error occurs here 

        if(nextN == NULL) 
        { 
          nextN = newNode; 
        } 
        else 
        { 
          nextN->next = newNode; 
          nextN = nextN->next; 
        } 
        thisNode = thisNode->next; 
        size++; 
      } 
    } 
    else 
    { 
     cout << "The list empty." << endl; 
     return; 
    } 
} 

如果我刪除第10行的封裝,構造函數不會發出錯誤。但是,一旦我調用析構函數,舊列表仍然引用剛被清空的內存。

我真的很感謝在這個任務上的任何幫助。我認爲我並沒有正確引用指針,但似乎無法破解代碼並使其正常工作...

+0

歡迎來到StackOverflow。 請參考[遊覽], 學習問好問題stackoverflow.com/help/how-to-ask, 做個[mcve]。 如果您正在尋找調試代碼的幫助,請參閱https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+0

您應該使用newNode-> value = thisNode-> value – Kapil

回答

0

而不是 newNode-> value =(* thisNode-> value);你需要 newNode-> value = thisNode-> value;

+0

I開始這樣做,但是當我銷燬之前的列表時,新列表的數據不會保留。我認爲newNode-> value只是指向與thisNode-> value相同的地址。我不知道如何實際創建一個值的副本,而不是指向同一塊內存。 – RLee

相關問題