0

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,&current,&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, &current)==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;
}
3
Contributors
6
Replies
7
Views
6 Years
Discussion Span
Last Post by gerard4143
0

If think you should upgrade your compiler, its passing back mangled names in its error message.

This, on line 81

bool search(int roll,Node **current,Node **previous)

Should be

bool list::search(int roll,Node **current,Node **previous)

Edited by gerard4143: n/a

0

There is no upgrade to that compiler -- it has been dead and buried for quite some time now.

I think using mangled names is common to all linkers -- all Microsoft compilers do that too. It's beyond the scope of a linker to know the unmangled name. The mangled name is actually more useful information because it tells you exactly which of all function overloads caused the problem.

0

than budyy...
my compiler is already upgraded ..
only problem was with syntex as you pointed out.
now its working fine

0

There is no upgrade to that compiler -- it has been dead and buried for quite some time now.

I think using mangled names is common to all linkers -- all Microsoft compilers do that too. It's beyond the scope of a linker to know the unmangled name. The mangled name is actually more useful information because it tells you exactly which of all function overloads caused the problem.

I run a current version of GCC and its linker passes back non-mangled names.

0

i am using devc++ code is running..
actually i am not able to install GCC could you let me know how cold i install GCC since info given on their site is not enough

0

i am using devc++ code is running..
actually i am not able to install GCC could you let me know how cold i install GCC since info given on their site is not enough

I'll assume your running Windows.

Download Code::Blocks or QT Creator and you'll get a current version of GCC with either or you could try Window's Visual C++ express.

Edited by gerard4143: n/a

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.