【发布时间】:2014-08-09 10:48:51
【问题描述】:
所以我刚开始学习 C++ 的 LinkedLists。我知道 C+ 为他们提供了一个库,但我正试图专注于 LinkedLists。我看到的一个练习要求您设计一个带有 2 个成员函数和一个默认构造函数的链表类:add、isMember 和 LinkedList() 构造函数。添加函数将一个新节点添加到列表的前面。 isMember 测试列表中是否包含一个节点,该节点具有传入要添加的值。
我的问题是,我在结构中创建 ListNode *head,然后我尝试在 LinkedList 构造函数中访问它以将其设置为 null,它向我抛出“未声明的标识符”错误。即使我在结构中将它设置为 NULL 它也会给我同样的错误。如果我在构造函数中写“ListNode *head = NULL”,错误就会消失,但是我的 add 方法仍然会因为使用“未声明的标识符”头而变得疯狂。 到目前为止,这是我得到的:
LinkedList.h:
class LinkedList
{
protected:
struct ListNode
{
double value;
ListNode *next;
ListNode(double value1, ListNode *next1 = NULL)
{
value = value1;
next = next1;
}
ListNode *head;
};
// Public Interface
public:
// Class Constructor(s)
LinkedList();
// Methods
void add(double x);
bool isMember(double x);
// Private Class Members
private:
};
LinkedList.cpp:
#include "stdafx.h"
#include "LinkedList.h" // Class Definition file
// Class Default Constructor
LinkedList::LinkedList()
{
head = NULL;
}
// Class Destructor
LinkedList::~LinkedList(void)
{
ListNode *nodePtr;
while (nodePtr != NULL)
{
ListNode *garbage = nodePtr;
nodePtr = nodePtr->next;
delete garbage;
}
}
void LinkedList::add(double x)
{
ListNode *nodePtr, *prevNodePtr;
if (head == NULL || head->value >= x)
{
head = new ListNode(x, head);
}
else
{
nodePtr = head->next;
while (nodePtr != NULL && nodePtr->value < x)
{
prevNodePtr = nodePtr;
nodePtr = nodePtr->next;
}
prevNodePtr->next = new ListNode(x, nodePtr);
}
}
bool LinkedList::isMember(double x)
{
//tbd
}
任何关于为什么会这样的线索都会有很大的帮助。谢谢!
【问题讨论】:
-
head是ListNode的成员,而不是LinkedList。ListNode拥有head真的没有意义。
标签: c++ class struct linked-list nodes