搜索二进制文件C ++

#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()并定义search()时出现错误。我放入了编译器作为注释行抛出的错误。谁能解释那里出了什么问题?

史蒂夫·洛里默(Steve Lorimer)

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

给您f打电话后的访问权限search,最好通过引用传递它。

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

void search(fstream& fin,char* nm)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章