hi
please solve my problem i am getting linking error in following program. i am using devc++ for copilation
linking errors:
C:\Users\shiv\AppData\Local\Temp\ccaMbaaa.o(.text+0x286) In function `ZN4list7delnodeEi':
C:\Users\shiv\AppData\Local\Temp\ccaMbaaa.o(.text+0x286) In function `ZN4list7delnodeEi':
[Linker error] undefined reference to `list::search(int, Node**, Node**)'
C:\Users\shiv\AppData\Local\Temp\ccaMbaaa.o(.text+0x62c) ld returned 1 exit status
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
class Node
{
public:
int roll;
char name[50];
Node * next;
};
class list
{
Node *start;
public:
list(); //constructor for initialisation
int addnode(int x); //function for addinng nodes in the class
bool delnode(int y); ///for deletion
bool search(int roll,Node **current,Node **privious); //for searching
bool listempty(); //function to check weather stack is empty or
int traverse();
};
list:: list()
{
start=NULL;
}
int list:: addnode(int r)
{
char name[50];
cout<<"enter roll no \n";
cin>>r;
cout<<"enter name\n";
gets(name);
cin.get();
Node *newnode=new Node;
newnode->roll=r;
strcpy(newnode->name,name); // could not copy directoly like newnode->name=n
if((start==NULL)||(r<start->roll)) //roll to be inserted is first one
{
if((start!=NULL)&&(r==start->roll))
{
cout<<"duplicacy not allowed";
return 0;
}
newnode->next=start;
start=newnode;
return 0;
}
//code for inserting in between node,it would also work for begning
Node *previous,*current;
previous=current=start;
while((current!=NULL)&&(r>current->roll))
{
if(r==current->roll)
{
cout<<"duplicacy not allowed";
}
previous=current;
current=current->next;
}
newnode->next=current;
previous->next=newnode;
}
//delete function;
bool list :: delnode(int element)
{
Node *current,*previous;
if(search(element,¤t,&previous))
cout<<"element is not present in the list";
previous->next=current->next;
if(current ==start)
start=start->next;
delete current;
return true;
}
//search function
bool search(int roll,Node **current,Node **previous)
{
*previous=*current=NULL;
while((*current!=NULL)&&(roll!=(*current)->roll))
{
*previous=*current;
*current=(*current)->next;
}
return(*current!=NULL);
}
bool list :: listempty() // to check if list is empty
{
if(start=NULL)
return true;
else
return false;
}
int list :: traverse()
{
if(listempty())
{
cout<<"list is empty no need to travrse add elements to list\n";
}
else
{
cout<<"the records in the lists are:\n";
Node * current;
for(current=start;current!=NULL;current=current->next)
{
cout<<current->roll<<"s name is "<<current->name<<"\n";
}
}
}
main()
{
list l;
int rollno;
char ch;
while(1)
{
cout<<endl<<"********menu*******";
cout<<"1.add a record to the list\n";
cout<<"2.delete a record from list\n";
cout<<"3.view all the records in list\n";
cout<<"4.search a roll no in the list\n";
cout<<"5.exit\n";
cout<<"\n enter your choice(1-5)";
cin>>ch;
switch(ch)
{
case '1':
{
l.addnode(rollno);
}break;
case '2':
{
if(l.listempty())
{
cout<<"list is empty no element could be delted add elements in the list";
break;
}
cout<<"enter the roll no of the student whose record is to be deleted\n";
cin>>rollno;
if(l.delnode(rollno)==false)
cout<<"no record found for this roll no\n";
else
cout<<"record with roll no"<<rollno<<"deleted\n";
}
break;
case '3':
{
l.traverse();
}
break;
case '4':
{
if(l.listempty())
{
cout<<"list is empty";
break;
}
Node *previous,*current;
cout<<"\n enter the roll no of student whose record is to be searched";
cin>>rollno;
if((l.search(rollno, &previous, ¤t)==false)) //FALSE
cout<<"record not found<!>\n";
else
{
cout<<"record found!\n";
cout<<"\nroll no:"<<current->roll;
cout<<"\n\nName:"<<current->name;
}
}break;
case '5':
{
exit(0);
}break;
default:
{
cout<<"invalid option";
}break;
}
}
getch();
// return 0;
}