在二进制文件C ++中搜索

时间:2014-09-09 05:50:24

标签: c++ file class c++11 file-io

#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;
}

上述程序首先创建一个文件&#34; stu.txt&#34;并将用户给定的输入写入文件。 然后应该根据用户输入的名称搜索记录(使用search()函数)。我在调用search()和定义search()时遇到错误。我已经把编译器抛出的错误作为注释行。任何人都可以解释那里出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

fstream不可复制,因此您必须传递fstream作为参考,或者在c ++ 11中移动它。

如果您在致电f后访问search,则最好通过引用将其传递。

更改您的功能以接受fstream作为参考

void search(fstream& fin,char* nm)