所以我刚刚开始学习C ++的LinkedLists。我知道C +有一个库,但我正在努力关注LinkedLists。我看到的练习要求您设计一个包含2个成员函数和默认构造函数的链表类:add,isMember和LinkedList()构造函数。添加功能将新节点添加到列表的前面。 isMember测试以查看列表是否包含传入要添加的值的节点。
我的问题是,我在struct中创建了ListNode *头,然后我尝试在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
}
关于为什么会这样做的任何线索都将是一个巨大的帮助。谢谢!
答案 0 :(得分:1)
您声明了ListNode结构,但您从不在任何具有ListNode类型的对象声明。因此,当您尝试从LinkedList方法中访问head
元素时,它确实是未声明的标识符,因为LinkedList类没有任何名为head
的元素。
如果你想改变你的LinkedList声明:
class LinkedList
{
protected:
struct ListNode
{
double value;
ListNode *next;
ListNode(double value1, ListNode *next1 = NULL)
{
value = value1;
next = next1;
}
ListNode *head = NULL;
} node; // actually instantiating ListNode element as part of LinkedList class
// Public Interface
public:
// Class Constructor(s)
LinkedList();
// Methods
void add(double x);
bool isMember(double x);
// Private Class Members
private:
};
然后你可以用这种方式调用head
元素:
LinkedList::LinkedList()
{
node.head = NULL;
}
答案 1 :(得分:0)
您可能希望head成为LinkedList的成员,而不是ListNode。
class LinkedList {
class ListNode {
double value;
ListNode *next;
};
ListNode *head;
};