2012-09-25 44 views
-1

我在寫一個簡單的程序來輸入學生記錄並將它們存儲在一個以逗號分隔的文件中。一切看起來不錯,但是當我運行程序我得到一個錯誤:fstream在C++中的錯誤

錯誤1個錯誤C2248:「的std :: basic_ios < _Elem,_Traits> :: basic_ios」:不能訪問類的性病聲明私有成員:: basic_ios < _Elem,_Traits> C:\ Program Files文件\微軟的Visual Studio 10.0 \ VC \包括\ fstream的1116 1 PROJECT1

下面的代碼:

#include <cstring> 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 

using namespace std; 

void closeOrNewRecordMenu(string enterAnotherRecord) 

    { 
     if (enterAnotherRecord == "Q" && enterAnotherRecord == "q") 
     { 
     exit(0); 
     } 
    } 

void newStudentRecord(double studentNumber, string firstName, string lastName, string campus, string course1, string course2, string course3, string seniorPracticum, ofstream writeToRecordsFile) 

    { 
     int campusChoice; 
     do { 
     cout << "Student's six digit number: (Numeric only)"; 
     cin >> studentNumber; 
     cin.ignore(); 
     } 
     while (studentNumber < 100000 && studentNumber > 999999); 

     cout << "Student's first name: " << "\n"; 
     cin >> firstName; 
     cin.ignore(); 

     cout << "Student's last name: " << "\n"; 
     cin >> lastName; 
     cin.ignore(); 

     while (campusChoice < 1 || campusChoice > 3) 

     cout << "Which campus will " << firstName << " " << lastName << " be attending class at: " << "\n"; 

     cout << "For the North campus enter 1" << "\n"; 

     cout << "For the South campus enter 2" << "\n"; 

     cout << "For the Seaside campus enter 3" << "\n"; 

     cin >> campusChoice; 
     cin.ignore(); 

     if (campusChoice == 1) 
      { 
       campus = "North Campus"; 
     } 

     else if (campusChoice == 2) 
     { 
      campus = "South Campus"; 
     } 

     else if (campusChoice == 3) 
     { 
      campus = "Seaside Campus"; 
     } 
     else { 
      cout << "Please enter a valid choice." << "\n" << "\n"; 
     } 

     cout << "Student's first course: " << "\n"; 
     getline (cin, course1); 
     cin.ignore(); 

     cout << "Student's second course: " << "\n"; 
     getline (cin, course2); 
     cin.ignore(); 

     cout << "Student's third course: " << "\n"; 
     getline (cin, course3); 
     cin.ignore(); 

     do { 
     cout << "Is " << firstName << " " << lastName << " a senior this year? Please enter \"Y\" for yes and \"N\" for no." << "\n"; 
     cin >> seniorPracticum; 
     cin.ignore(); 
     } while (seniorPracticum != "y" && seniorPracticum != "Y" && seniorPracticum != "n" && seniorPracticum != "N"); 

     writeToRecordsFile << studentNumber << "," << firstName << "," << lastName << "," << campus << "," << course1 << "," << course2 << "," << course3 << "," << seniorPracticum << "\n"; 

     cout << "The student record for " << firstName << " " << lastName << " has been saved." << "\n" << "\n"; 
} 

int main() 

    { 
     cout << "Hello there! Welcome to the student record manager. From here you can enter new student information and save it to a file!!!! (More exciting to the developer than the user)." << "\n" << "\n"; 

    string enterAnotherRecord; 

    ofstream writeToRecordsFile; 

    writeToRecordsFile.open("cop2224_proj1.txt"); 

     while (enterAnotherRecord != "Q" && enterAnotherRecord != "q") { 
      cout << "Press \"N\" to create a new student record or press \"Q\" to quit." << "\n" << "\n"; 

      cin >> enterAnotherRecord; 

      closeOrNewRecordMenu(enterAnotherRecord); 

      string firstName, lastName, seniorPracticum, campus, course1, course2, course3; 
      double studentNumber; 

      newStudentRecord(studentNumber, firstName, lastName, campus, course1, course2, course3, seniorPracticum, writeToRecordsFile); 
     } 

    writeToRecordsFile.close(); 

    } 

回答

2

流是不可拷貝,即使他們是,你不想在這裏通過–路過改爲參考。您newStudentRecord簽名改爲:

void newStudentRecord(double studentNumber, string firstName, string lastName, string campus, string course1, string course2, string course3, string seniorPracticum, ofstream& writeToRecordsFile); 

話雖這麼說,你爲什麼要在所有這些參數傳遞,當你不關心他們的初始值,你不把它們作爲輸出參數?簡化您的簽名如下:

void newStudentRecord(ofstream& writeToRecordsFile); 

,併爲newStudentRecord內局部變量聲明的其他參數。


順便說一句,你讀campusChoice初始化之前,這將產生undefined behavior