[英]Accessing a member of struct in class, LinkedList Node
所以我只是开始学习C ++的LinkedLists。 我知道C +为他们提供了一个库,但我试图将重点放在LinkedLists上。 我看到的一个练习要求您设计一个具有2个成员函数和一个默认构造函数的链接列表类:add,isMember和LinkedList()构造函数。 添加功能将新节点添加到列表的最前面。 isMember测试以查看列表中是否包含带有要添加的值的节点。
我的问题是,我在结构中创建ListNode * head,然后尝试在LinkedList构造函数中访问它以将其设置为null,这使我抛出“未声明标识符”错误。 即使我在结构中将其设置为NULL,它也会给我同样的错误。 如果我在构造函数中编写“ ListNode * head = NULL”,该错误就会消失,但是我的add方法仍然对使用“未声明的标识符” head感到疯狂。 这是到目前为止我得到的:
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
}
关于为什么这样做的任何线索都会有很大的帮助。 谢谢!
您声明了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;
}
您可能希望head成为LinkedList的成员,而不是ListNode的成员。
class LinkedList {
class ListNode {
double value;
ListNode *next;
};
ListNode *head;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.