2014-09-09 19 views
2
#include <iostream> 
#include <fstream> 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 

class Student{ 
private: 
    char name[40]; 
    char grade; 
    float marks; 
public: 
    void getdata(); 
    void display(); 
    char* getname(){return name;} 
    void search(fstream,char*); 
}; 

void Student::getdata(){ 
    char ch; 
    cin.get(ch); 
    cout<<"Enter name : "; 
    cin.getline(name,40); 
    cout<<"Enter grade : "; 
    cin>>grade; 
    cout<<"Enter marks : "; 
    cin>>marks; 
    cout<<"\n"; 
} 

void Student::display(){ 
    cout<<"Name : "<<name<<"\t"; 
    cout<<"Grade : "<<grade<<"\t"; 
    cout<<"Marks : "<<marks<<"\t"<<"\n"; 
} 

void search(fstream fin,char* nm)/*initializing argument 1 of 'void search(std::fstream, char*)'*/{ 
    Student s; 
    fin.open("stu.txt",ios::in|ios::binary); 
    while(!fin){ 
     fin.read((char*)&s,sizeof(s)); 
     if(s.getname()==nm){ 
      cout<<"Record found !"; 
      s.display(); 
      break; 
     } 
    } 
    fin.close(); 
} 

int main(){ 
    system("cls"); 
    char nam[40]; 
    Student arts[3]; 
    fstream f; 
    f.open("stu.txt",ios::in|ios::out|ios::binary); 
    if(!f){ 
     cerr<<"Cannot open file !"; 
     return 1; 
    } 
    for(int i=0;i<3;i++){ 
     arts[i].getdata(); 
     f.write((char*)&arts[i],sizeof(arts[i])); 
    } 
    f.close(); 
    cout<<"Enter name to be searched for : "; 
    cin.getline(nam,40); 
    char* p = new char[40]; 
    p=nam; 
    search(f,p);/*synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here*/ 
    getch(); 
    f.close(); 
    return 0; 
} 

Вышеупомянутая программа сначала создает файл «stu.txt» и записывает введенный пользователем ввод в файл. Затем предполагается искать запись, основанную на имени, которое вводит пользователь (используя функцию поиска()). Я получаю ошибки при вызове search(), а также определение search(). Я ввел ошибки, которые компилятор выбрасывает как строки комментариев. Может ли кто-нибудь объяснить, что там происходит не так?Поиск в двоичном файле C++

+0

Вы не можете иметь 'fstream' параметр, потому что' fstream' не может быть скопирован. Вместо этого используйте 'fstream & '. –

+0

Спасибо! Это устранило ошибки! – Monk

+1

Не могли бы вы объяснить, почему fstream & works? – Monk

ответ

1

fstream не подлежит копированию, поэтому вам необходимо передать fstream в качестве ссылки или в C++ 11 переместить его.

Учитывая, что вы получили сообщение f после звонка search, лучше передать его по ссылке.

Изменить вашу функцию, чтобы принять fstream как ссылка:

void search(fstream& fin,char* nm) 
Смежные вопросы