带有未声明标识符错误的循环链表

时间:2017-04-28 15:31:59

标签: c++ linked-list undeclared-identifier

我正在尝试构建一个循环链接列表,该列表按时间间隔删除并删除它所在的节点。但我一直得到一个未声明的标识符错误。我似乎无法解决此错误。

#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(){};

2 个答案:

答案 0 :(得分:1)

您尚未正确限定成员函数定义。

它们必须以类名

为前缀
int CircularLinkedList::addAtFront(Node *n)
{
    // ...
}

您可能还有其他错误。我注意到你的search函数与类中的定义(不同的返回类型)不匹配。如果你还有其他问题我也不会感到惊讶。

我现在可以给出的最佳建议是阅读错误消息 - 它试图告诉你一些事情。

答案 1 :(得分:0)

几个问题:

a)参数head是方法searchaddAtFrontdeleteNode中未声明的标识符。

要解决此问题,您可以将类中声明的函数定义为CircularLinkedList::search,而不仅仅是search,并将成员head称为this->head

b)你需要定义getLastNode(),它缺少