2013-10-22 18 views
0

我得到一個「場不解決錯誤」這一行代碼:場鏈表沒有解決節點

template <class Object> 
void FHlist<Object>::pop_back() 
{ 
    Node *p; 

    // safer, but a little slower with this test 
    if (mSize == 0) 
     return; 

    p = mTail->prev; 
    mTail->prev = p->prev; // ERROR IS HERE 
    mTail->prev->next = mTail; 
    delete p; 
    mSize--; 
} 

這是我的節點類聲明:

template <class Object> 
class FHlist<Object>::Node 
{ 
public: 
    Node *prev, *next; 
    Object data; 

    Node(const Object & d = Object(), Node *prv = NULL, Node *nxt = NULL) 
     : prev(prv), next(nxt), data(d) 
    { } 
}; 

爲什麼我我得到這個錯誤,我將如何解決?

回答

0

我認爲錯誤在上一行。 什麼是mTail? -edit-我如何將它添加爲評論?

+0

它是創建一個節點早。它指向鏈接列表的尾部 – user2905147

+0

Srry之前沒有看到您的回覆。我假設你現在已經自己解決了這個問題。 由於p和mTail的類型而出現的錯誤。 p是Node類型的指針,它沒有成員名稱prev,next。你有從Node派生的類的這兩個成員。 –

1

您可能需要更改代碼如下:

template <class Object> 
class FHlist<Object>::Node 
{ 
    public: 
     Node<Object> *prev, *next; 
}; 

參考this

1

你也可能要重新審視你的pop_back FN,

p = mTail; 
    mTail = p->prev; 
    mTail->next = NULL; 
    delete p; 
+0

這段代碼從鏈表中刪除最後一個節點(假設mTail是指向最後一個節點的指針),我相信這是正確的方法。問題中的邏輯是從鏈表中刪除倒數第二個節點(不知道這是否是爲了某個目的完成的)。 – Pai