在类LinkedList节点中访问结构体的成员
Accessing a member of struct in class, LinkedList Node
所以我刚刚开始学习c++的LinkedLists。我知道c++有专门的库,但我想把重点放在LinkedLists上。我看到的一个练习要求您设计一个带有2个成员函数和一个默认构造函数的链表类:add、isMember和LinkedList()构造函数。Add函数将一个新节点添加到列表的前面。isMember测试列表是否包含带有要添加的值的节点。
我的问题是,我在结构体中创建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
}
任何线索,为什么这将是一个巨大的帮助。谢谢!
您声明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;
};
相关文章:
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 访问不同类的私有结构体成员
- C++ 使用成员函数返回结构体指针属性的值
- 通过函数参数确定结构体成员
- 如何使用其他函数返回的值为结构体成员赋值
- 当我想为结构体声明新成员时,有些麻烦我不明白
- CUDA:结构体的共享数据成员和对该结构体的引用成员具有不同的地址和值
- 按结构体的特定成员对结构体数组进行排序
- 如何在编译时输出结构体中成员的偏移量(C/ c++)
- Vector::erase()也擦除结构体的成员向量
- 模板结构体的静态const成员的不同值
- 比较值与结构体成员的问题
- 从二进制文件中提取结构体成员
- 为什么我的结构体成员没有使用"{}"正确初始化?
- 函数参数 -> 结构体成员的 void* 和常量 void* 的解决方案
- 动态结构体成员在使用 CUDA/NVCC 传递到函数时损坏
- 将相同的变量赋给具有不同值的多个结构体成员
- 为什么编译器不能像变量声明那样在结构体成员中设置 char[] = { .. } 的大小?