2016-03-06 29 views
-4

下面我有一些基本的代碼,我正在學習鏈接列表。這個函數傳遞一個數組並從中創建一個鏈表。但是,當我嘗試編譯它時,我得到一個關於非指針類型的錯誤。誰能告訴我我做錯了什麼?由於編譯錯誤,鏈接列表:錯誤:' - >'的基本操作數有非指針類型'IntNodeType'

struct IntNodeType { 
    int value; 
    IntNodeType * next; 

    IntNodeType (int v=0, IntNodeType * p=NULL):value(v),next(p) 
    { 

    } 
}; 
IntNodeType * InitList (int a[], int size) 
{ 
     IntNodeType *p; 

     p = new IntNodeType[size]; 
     int i = 0; 

     while (i < size) 
     { 
       p[i]->value = a[i]; 

       if (i == size - 1) 
       { 
         p[i] -> next = NULL; 
         break; 
       } 
       else 
         p[i] -> next = p[i+1]; 

       i++; 
     } 

     return p; 

} 

回答

0

要正確編譯代碼,InitList的身體應該是:

// .. 
    IntNodeType *p; 

    p = new IntNodeType[size]; 
    int i = 0; 

    while (i < size) 
    { 
      p[i].value = a[i]; // here 

      if (i == size - 1) 
      { 
        p[i].next = nullptr; // here + nullptr 
        break; 
      } 
      else 
        p[i].next = &(p[i+1]); //here 

      i++; 
    } 

    return p; 

通知的期限運營商,而不是運營商->的使用。

儘管p是一個數組類型(可以被腐蝕成一個指針),它的內容不是指針。 p包含size許多IntNodeType s。 對於最後提到的線,你需要一個參考傳遞到非指針p[i+1]

這也是值得注意的,你應該在NULL使用nullptr

+0

非常感謝你的清晰和深思熟慮的答案。我只是想知道應該在什麼條件下使用nullptr over null? –

+0

@ chynna-hernandez總之,總是。 'nullptr'是標準,'NULL'只會導致問題。如果這有助於您,請將此標記爲解決方案,謝謝! –

+0

我試圖標記它,顯然有一個時間限制,以便您可以標記解決方案,但我想讓你知道我確實很感謝你的幫助! –