我正在尝试构建一个循环链接列表,该列表按时间间隔删除并删除它所在的节点。但我一直得到一个未声明的标识符错误。我似乎无法解决此错误。
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node *next;
Node() {data = 0;next = NULL;}
Node(int x) {data = x;next = NULL;}
};
class CircularLinkedList {
public:
int addAtFront(Node *n);
int isEmpty();
int addAtEnd(Node *n);
CircularLinkedList() {head = NULL;}
Node *head;
Node* search(int k);
Node* deleteNode(int x);
};
int search(int x) {
Node *ptr = head;
while(ptr != NULL && ptr->data != x) {
ptr = ptr->next;
}
return ptr;
}
int addAtFront(Node *n) {
int i = 0;
if(head == NULL) { //error: undeclared identifier 'head'
n->next = head;
head = n; //error: undeclared identifier 'head'
i++;
}
else {
n->next = head; //error: undeclared identifier 'head'
Node* last = getLastNode(); //error: undeclared identifier 'getLastNode'
last->next = n;
head = n; //error: undeclared identifier 'head'
i++;
}
return i;
}
int deleteNode(int x) {
Node *n = search(x); //error: Cannot initialize a variable of type 'Node *' with an rvalue of type 'int'
Node *ptr = head; //error: undeclared identifier 'head'
if(ptr == NULL) {
cout << "List is empty";
return NULL;
}
else if(ptr == n) {
ptr->next = n->next;
return n;
}
else {
while(ptr->next != n) {
ptr = ptr->next;
}
ptr->next = n->next;
return n;
}
}
int main(){};
答案 0 :(得分:1)
您尚未正确限定成员函数定义。
它们必须以类名即
为前缀int CircularLinkedList::addAtFront(Node *n)
{
// ...
}
您可能还有其他错误。我注意到你的search
函数与类中的定义(不同的返回类型)不匹配。如果你还有其他问题我也不会感到惊讶。
我现在可以给出的最佳建议是阅读错误消息 - 它试图告诉你一些事情。
答案 1 :(得分:0)
几个问题:
a)参数head是方法search
,addAtFront
,deleteNode
中未声明的标识符。
要解决此问题,您可以将类中声明的函数定义为CircularLinkedList::search
,而不仅仅是search
,并将成员head
称为this->head
。
b)你需要定义getLastNode()
,它缺少