2015-09-07 68 views
-4

我創建了一個ListNode類:鏈表指針錯誤是沒有意義的

ListNode::ListNode() 
{ 
    value = 0; 
    next = NULL; 
    previous = NULL: 
} 

所以我有這個功能應該返回的節點是頭之後:

ListItr List::first() 
{ 
    ListItr* first = new ListItr(head->next); 
    return first; 
} 

我將參數head->next傳遞給此功能:

ListItr::ListItr(ListNode* theNode) 
{ 
    current = theNode; 
} 

當我嘗試編譯我的代碼,我得到的是說no viable conversion from 'ListItr *' to 'ListItr'

的記錄錯誤下一個錯誤說:

`candidate constructor (the implicit copy constructor) not viable: no know conversion from 'ListItr *' to 'const ListItr &' for 1st argument; dereference the argument with * 

我不明白什麼是錯我的代碼意義上的函數需要一個點被傳遞,這就是我所傳遞的。

+1

鏈接:http://stackoverflow.com/questions/32428930/no-viable-conversion-from-class-to-class/32429505 – Tas

+0

錯誤你說你get與下面的音符略有不同。一個是說它不能從'ListItr *'轉換爲'ListItr',但另一個說不能從'ListItr *'轉換爲'ListNode *'。你的'ListItr'構造函數需要'ListNode *';然而,如果你嘗試傳遞一個'ListItr *',它會假設你試圖隱式複製構造。如果您對類型感到困惑,可能有助於將它們重新命名爲完全不同的單詞。 – Tas

+0

我知道這就是爲什麼我很困惑!我不明白錯誤消息,並且在代碼中看不到問題。 –

回答

0

您不必致電new創建所有內容,這不是Java。只有當你想創建一個指向動態分配對象的指針時才使用new。在這裏,您只是試圖創建並返回一個普通對象,而不是一個動態創建的對象。

ListItr List::first() 
{ 
    ListItr* first = new ListItr(head->next); 
    return first; 
} 

應該

ListItr List::first() 
{ 
    return ListItr(head->next); 
}