2015-10-04 75 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