2013-03-19 69 views
0
int main(){ 

    int choice; 
    fstream in, out;        

    switch(choice) 
    { 

    case 1: 
     filename = s.studentRegister(); 
     out.open(filename.c_str(), ios::out); 
     out.write((char *)&s, sizeof(Student)); 
     cout<<endl<<"Registered successfully."<<endl; 

    case 2: 
     s.studentLogin(); 
    }         
} 

class Student 
{ 
std::string studentName, roll, studentPassword; 
fstream in, out; 

public: 

std::string studentRegister() 
{ 
    cout<<"Enter roll number"<<endl; 
    cin>>roll; 
    cout<<"Enter current semester"<<endl; 
    cin>>ch; 
    cout<<"Enter your name"<<endl; 
    cin>>studentName; 
    cout<<"Enter password"<<endl; 
    cin>>studentPassword; 

    return (roll+".dat"); 
} 

void studentLogin() 
{ 
      Student s; 
    cout<<"Enter roll number: "<<endl; 
      cin>>roll; 
    cout<<"Enter password: "<<endl; 
    cin>>studentPassword; 

    filename = roll + ".dat"; 
    in.open(filename.c_str(), ios::in); 
    in.read((char *)&s, sizeof(Student)); 

    read.close(); 

    if((studentPassword.compare(s.studentPassword)==0)) 
    { 
     system("cls"); 
     cout<<"Welcome "<<s.studentName<<"!"<<endl; 
     displayStudentMenu(); 
    } 

    else 
    { 
     cout<<"Invalid user"; 
     exit(0); 
    } 

} 

我在學生課中有兩個功能:studentRegister()studentLogin()。當調用studentRegister時,它接受學生的所有細節,然後將相應類的對象寫入DAT文件。現在,在登錄時,我嘗試使用in.read((char *)&s, sizeof(Student));如何將一個類的對象傳遞給同一個類的函數?

將文件內容讀入對象「s」。但是,這會導致運行時錯誤並且控制檯突然關閉。出了什麼問題?

+3

正如您在另一個問題中提到的,您無法用這些方法編寫和閱讀您的課程。 (此外,問題標題與實際問題沒有任何關係。) – 2013-03-19 13:01:18

+0

請提供*短*,*完整*示例程序。有關更多詳細信息,請參閱http://SSCCE.org。 – 2013-03-19 13:09:02

回答

1

閱讀和寫作不按照您嘗試的方式工作。它們只適用於沒有指針的類,但字符串有指針,而你的類有字符串,所以你不能使用它們。

您將不得不尋找一種不同的方式來讀取和寫入您的數據。有什麼問題你問,但inout不應該在你的Student類中聲明該

out << studentName << ' ' << roll << ' ' << studentPassword << '\n'; 

in >> studentName >> roll >> studentPassword;` 

也沒有問題。他們應該在你使用它們的功能中聲明。

+0

非常感謝!我在文件中存儲了多個字符串,並且不知道如何隨機訪問它們(不使用seekg())。在工作正常。順便說一句,可以在DAT和二進制文件中正確讀取,或只是文本文件? – Quoyo 2013-03-19 13:35:26

+0

Read將從任何類型的文件中讀取字節,並且寫入將把字節寫入任何類型的文件。問題是你有其他的東西。也就是說,你不能將字符串(或你的學生)這樣的對象視爲平坦的字節序列。他們有內部結構(使用指針等),讀寫一無所知。 – john 2013-03-19 13:45:28

相關問題