Ошибка компоновщика в turboc ++: неопределенный символ - PullRequest
1 голос
/ 20 февраля 2012

Я пробую следующую программу на TurboC.Я получаю ошибку компоновщика для одного из прототипов функций.Ошибка: undefined symbol checkbranch(char near*) in module student.cpp где student.cpp - это имя файла.Код компилируется без ошибок, и я не могу обнаружить ошибку здесь.Буду признателен за любую помощь.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>
#include<fstream.h>
#include<string.h>
#include<ctype.h>
void checkbranch(char string[]);
void checkusn(char string[]);
void checksem(char string[]);
void checkname(char string[]);
fstream file;
class iobuffer
{
    public: char maxbyte[120];
    iobuffer();
};
iobuffer::iobuffer()
{
for(int i=0; i<120; i++)
    maxbyte[i]='\0';
}
class student
{
public: char usn[20], name[25], sem[10], address[20], branch[10];
    student()
    {
        strcpy(name,"");
        strcpy(usn, "");
    strcpy(sem, "");
    strcpy(branch, "");
    strcpy(address, "");
}
void read();
void display();
void rsem();
void rname();
void rusn();
void rbranch();
void raddress();
};
void student::rusn()
{
cout<<"\n\tEnter the new usn: ";
gets(usn);
checkusn(usn);
}
void student::rname()
{
cout<<"\n\tEnter the name: ";
gets(name);
checkname(name);
}
void student::rsem()
{
cout<<"\n\tEnter the sem: ";
gets(sem);
checksem(sem);
}
void checkbranch(char string[]);
void student::rbranch()
{
cout<<"\n\tEnter the branch: ";
gets(branch);
checkbranch(branch);
}
void student::raddress()
{
cout<<"\n\tEnter the address: ";
gets(address);
}
void checkname(char arr[])
{
for(int j=0; arr[j]!='\0'; j++)
     if((!isalpha(arr[j]))&&(arr[j]!=' '))
     {
        cout<<"\n\tWrong input. Re-enter: ";
        gets(arr);
        j=-1;
     }
}
void student::read()
{
cout<<"\n\tUSN: ";
gets(usn);
checkusn(usn);
cout<<"\n\tName: ";
gets(name);
checkname(name);
cout<<"\n\tSem: ";
gets(sem);
checksem(sem);
cout<<"\n\tBranch: ";
gets(branch);
checkbranch(branch);
cout<<"\n\tAddress: ";
gets(address);
}
void checksem(char arr[])
{
int x=0;
if((strcmp(arr,"1")==0)||(strcmp(arr,"2")==0)||(strcmp(arr,"3")==0)||(strcmp(arr,"4")==0)||(strcmp(arr,"5")==0)||(strcmp(arr,"6")==0)||(strcmp(arr,"7")==0)||(strcmp(arr,"8")==0))
    x=1;
if(x==0)
{
    cout<<"\n\tInvalid sem. Re-enter: ";
    gets(arr);
    checksem(arr);
}
}
void checkusn(char string[])
{
    fstream ftemp;
    char temp[20], tempusn[20], usn[20];
    int i;
if((strlen(string)!=10)||(!isdigit(string[0]))||(!isdigit(string[3]))||(!isdigit(string[4]))||(!isdigit(string[7]))||(!isdigit(string[8]))||(!isdigit(string[9]))||(!isalpha(string[1]))||(!isalpha(string[2]))||(!isalpha(string[5]))||(!isalpha(string[6])))
{
    cout<<"\n\tInvalid USN. Re-enter: ";
    gets(string);
    checkusn(string);
}
file.open("studentdb.txt",ios::in|ios::binary);
while(file.read(temp,120))
{
    i=0;
    while((tempusn[i]=temp[i])!='|')
        i++;
    tempusn[i]='\0';
    if(strcmp(tempusn,string)==0)
    {
        cout<<"\n\tUSN already exists. Re-enter: ";
        gets(string);
        checkusn(string);
    }
}
file.close();
}
void student::display()
{
cout<<setiosflags(ios::left);
cout<<setw(15)<<usn<<setw(20)<<name<<setw(10)<<sem<<setw(15)<<branch<<setw(25)<<address;
}
class fixedlength:public iobuffer
{
public: char buffer[120];
void pack(student s);
void unpack(student s);
};
void fixedlength::pack(student s)
{
strcpy(maxbyte, "");
strcpy(maxbyte, s.usn);
strcat(maxbyte,"|");
strcat(maxbyte, s.name);
strcat(maxbyte, "|");
strcat(maxbyte, s.sem);
strcat(maxbyte, "|");
strcat(maxbyte, s.branch);
strcat(maxbyte, "|");
strcat(maxbyte, s.address);
strcat(maxbyte, "#");
}
void fixedlength::unpack(student s)
{
strcpy(buffer, maxbyte);
for(int i=0, j=1, k=0; j<=5; i++, j++)
{
switch(j)
{
    case 1: while(buffer[i]!='|')
            s.usn[k++]=buffer[i++];
        s.usn[k]='\0';
        k=0;
        break;
    case 2: while(buffer[i]!='|')
            s.name[k++]=buffer[i++];
        s.name[k]='\0';
        k=0;
        break;
    case 3: while(buffer[i]!='|')
            s.sem[k++]=buffer[i++];
        s.sem[k]='\0';
        k=0;
        break;
    case 4: while(buffer[i]!='|')
            s.branch[k++]=buffer[i++];
        s.branch[k]='\0';
        k=0;
        break;
    case 5: while(buffer[i]!='\0')
            s.address[k++]=buffer[i++];
        s.address[k]='\0';
        k=0;
    }
}
}
class delim:public fixedlength
{
public: void writerecord(student);
    void readrecord(student);
    void deleterecord(student, char*);
    void searchrecord(student, char*);
    void modifyrecord(student, char*);
};
void delim::writerecord(student s)
{
pack(s);
file.open("studentdb.txt", ios::app|ios::binary);
file.write((char*)&maxbyte, sizeof(maxbyte));
file.close();
}
void delim::readrecord(student s)
{
file.open("studentdb.txt", ios::in|ios::binary);
cout<<"\n\n File Contents\n\n";
while(file.read((char*)&maxbyte, sizeof(maxbyte)))
{
unpack(s);
cout<<endl;
s.display();
}
getch();
file.close();
}
void delim::searchrecord(student s, char *key)
{
int flag=0;
file.open("studentdb.txt",ios::in|ios::binary);
while((file.read((char*)&maxbyte,sizeof(maxbyte)))&&flag==0)
{
unpack(s);
if(!strcmp(s.usn,key))
{
    flag=1;
    s.display();
}
}
if(flag==0)
{
cout<<"\n\tSpecified record doesn't exist";
getch();
file.close();
}
    }
void delim::deleterecord(student s, char *a)
{
int flag=0;
char x;
fstream ftemp;
file.open("studentdb.txt",ios::in|ios::binary);
ftemp.open("temp.txt", ios::out|ios::trunc|ios::binary);
cout<<"\n\tAre you sure you want to delete (y/n)?";
cin>>x;
if(x=='y'||x=='Y')
{
while(file.read((char*)&maxbyte, sizeof(maxbyte)))
{
    unpack(s);
    if(strcmp(s.usn,a)==0)
        flag=1;
    else
        ftemp.write((char*)&maxbyte,sizeof(maxbyte));
}
}
if(flag==1)
{
file.close();
ftemp.close();
remove("studentdb.txt");
rename("temp.txt","studentdb.txt");
}
if(flag==0)
{
cout<<"\n\tThe specified record is not found\n";
file.close();
ftemp.close();
}
}
void delim::modifyrecord(student s, char *a)
{
int flag=0, choice;
file.open("studendb.txt",ios::in|ios::out|ios::binary);
while(file.read((char*)&maxbyte,sizeof(maxbyte)))
{
unpack(s);
if(strcmp(s.usn,a)==0)
{
    char x;
    flag=1;
    cout<<"\n\t Current contents: \n\n\n";
    s.display();
    do
    {
    cout<<"What do you want to change: ";
    cout<<"\n\t1.Name\n\t2. Sem\n\t3. Branch\n\t4. Address\n\t5. Confirm changes\n\t6. Return to main\n";
    cout<<"Enter choic: ";
    cin>>choice;
    switch(choice)
    {
        case 1: s.rname(); break;
        case 2: s.rsem(); break;
        case 3: s.rbranch(); break;
        case 4: s.raddress(); break;
        case 5: break;
        case 6: return;
        default: cout<<"Invalid option\n";
    }
    }while(choice==1||choice==2||choice==3||choice==4);
cout<<"\n\tDo you want to modify (y\n)?";
cin>>x;
if(x=='y'||x=='Y')
{
    pack(s);
    file.seekg(-120,ios::cur);
    file.write((char*)&maxbyte,sizeof(maxbyte));
}
else
        break;
}
}
if(flag==0)
{
cout<<"\n\t Specified record doesn't exist\n";
file.close();
}
}
void main()
{    
clrscr();
iobuffer i;
student s;
fixedlength f;
delim d;
int option;
char no[20], key[20];
for(;;)
    {
cout<<"\n\nMenu:- ";
cout<<"\n\t1. Insert\n\t2. Display\n\t3. Delete\n\t4. Modify\n\t5. Search\n\t6. End\n\t";
cin>>option;
switch(option)
{
    case 1: s.read();
        d.writerecord(s);
        break;
    case 2: d.readrecord(s);
        break;
    case 3: cout<<"Enter the usn to delete\n";
        gets(no);
        d.deleterecord(s, no); break;
    case 5: cout<<"\nEnter usn to be searched\n";
        gets(key);
        d.searchrecord(s,key);
        break;
    case 4: cout<<"\n\tEnter the usn to be modified\n";
        gets(no);
        d.modifyrecord(s,no);
        break;
    case 6: exit(0); break;
}
}
}

Я не был уверен, что будет ошибка, поэтому я попытался:

  1. Изменение порядка прототипов операторов функции (даже тогда ошибкабудет только для checkbranch)

  2. Запись прототипа функции для checkbranch в другом месте (снова будет ошибка)

  3. Удаление самого прототипа (а затем получить компиляциюошибка из-за отсутствия прототипа)

1 Ответ

1 голос
/ 20 февраля 2012

Вы должны реализовать функцию checkbranch, компилятор не может сделать это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...