节点和链接列表出现问题

时间:2017-01-29 21:22:59

标签: c++ pointers static linked-list private

我有一个任务,我应该创建在双向链表中插入和删除节点的方法。但是我的C ++有点生疏。 我的前后指针出错了。

LinkedList.h

unresolved external symbol "private: static struct node * LinkedList::front (?front@LinkedList@@0PAUnode@@A)


unresolved external symbol "private: static struct node * LinkedList::rear (?rear@LinkedList@@0PAUnode@@A)

LinkedList.cpp

{{1}}

我得到的错误是:

{{1}}

如果我在cpp文件中引用静态时从私有变量中删除静态,我得到"非静态成员引用必须相对于特定对象"

2 个答案:

答案 0 :(得分:9)

您已成为frontrear成员static。这意味着LinkedList类的所有实例只有一个这些成员的实例。

如果这是你想要的,那么你需要在.cpp文件中声明它们,就像@Soeren建议的那样:

node* LinkedList::front = nullptr;
node* LinkedList::read = nullptr;

但是,您可能希望能够创建多个LinkedList,并跟踪每个frontrear。如果是这种情况,那么您应该使这些成员不是静态的(并且还使insert_front()非静态)。

执行此操作时出错的原因是您需要创建该类的实例才能使用它:

LinkedList list;
list.insert_front(5);

答案 1 :(得分:6)

您必须初始化cpp文件中的静态变量:

node* LinkedList::front = nullptr;
node* LinkedList::rear = nullptr;

我们只能在类上调用静态类成员,而不能在类的对象上调用。即使没有实例,这也是可能的。这就是为什么每个静态成员实例必须初始化的原因,通常是在cpp文件中。

由于静态变量在类范围外初始化,我们必须通过全名调用变量(例如LinkedList :: front)。