指针,自定义类,Seg Fault 11s

时间:2015-10-04 13:06:28

标签: c++ class pointers

尝试设计一个简单的链表。节点声明为:

$que =$db->prepare("SELECT first_name, last_name, bio FROM userss WHERE username=:username");
$que->execute(array(':username'=>$username));
$row = $que->fetch(PDO::FETCH_ASSOC);
$db_first_name = $row['first_name'];
$db_last_name = $row['last_name'];
$db_bio = $row['bio'];

所以m_next指向列表中的下一个项目,m_payload保存其值。 m_head声明为:

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;
};

使用有效负载t将新节点放在列表前面的功能不完整:

private:
Node    m_head;             // Head node

上面应该声明一个有效负载为t的新节点,并将m_head的下一个节点设置为新节点。我还没有将它链接到列表的其余部分,只是想让至少一个节点工作。

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

这是尝试获取列表中的第一个节点,获取它的有效负载,然后返回...这会产生Seg Fault 11错误。

我很确定这是一个关于我如何做指针的问题,我对它们有一个大致的了解,但是阅读文档我仍然不知道如何处理错误。

谢谢!

1 个答案:

答案 0 :(得分:1)

在Jonathan Wakely的帮助下解决:

PushFront需要

Node *newnode = new Node(t);

此外,尝试使用

访问私有变量时出现问题
int payload = nextnode->m_payload;

我需要使用公共方法

int payload = nextnode->Data();