2015-10-04 70 views
0

試圖設計一個簡單的鏈接列表。節點聲明爲:指針,自定義類,段錯誤11s

class Node 
{ 
public: 
friend class CRevList; 

Node() {m_next = 0; m_prev = 0;} 
Node(const T &t) {m_payload = t; m_next = 0; m_prev = 0;} 

T Data() {return m_payload;} 
const T Data() const { return m_payload; } 

private: 
Node *m_next; 
Node *m_prev; 
T  m_payload; 
}; 

因此,m_next指向列表中的下一個項目,並且m_payload保存其值。 m_head被聲明爲這樣:

private: 
Node m_head;    // Head node 

不完整的功能把一個新節點在列表的前面與有效載荷噸:

void PushFront(const T &t) 
{ 
    Node *newnode = Node(t); 
    m_head.m_next = newnode; 
} 

上面應該聲明的新節點與t的有效載荷,並將m_head的下一個節點設置爲新節點。我還沒有將它鏈接到列表的其餘部分,只想得到至少1個節點的工作。

int GetFirst() //get value of first item in list. 
{ 
    Node *firstnode = m_head.m_next; 
    int payload = firstnode->m_payload; 
    return payload; //m_head.m_next->m_payload; 
} 

這是試圖讓列表中的第一個節點,獲取它的有效載荷,並返回...這給出了一個Seg Fault 11錯誤。

我很確定這是一個問題,我是如何做指針的,我對它們有一個大體的瞭解,但是在閱讀文檔時我仍然不確定如何處理錯誤。

謝謝!

+5

_'Node * newnode = Node(t);'_這是否會編譯? –

+0

是的,它編譯。它有什麼問題嗎? – redux

+2

你能把你的例子放在Ideone上,以證明它編譯好嗎? –

回答

1

與喬納森Wakely的幫助下解決了:

PushFront需要的是

Node *newnode = new Node(t); 

此外,嘗試與

int payload = nextnode->m_payload; 

我需要訪問私有變量的問題使用公開方法

int payload = nextnode->Data(); 
+1

要添加,'nullptr'是比設置指針'0'更好的選擇。 – Poriferous

+0

感謝Poriferous! – redux