我无法理解这个错误。这个错误不在我正在调试的类中。 (是吗?) 错误是:
c:\program files\microsoft visual studio 10.0\vc\include\fstream(890): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\ios(176) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我收到此错误的原因是什么?代码太冗长而无法发布。 我正在使用的编译器是 Microsoft visual c ++ 2010 express
编辑:
void HostelManager::guestMonitor() {
system("cls");
cout << "Name of the guest : "; // cin guest
cin.ignore();
getline( cin , guestName );
cout << "\nWhom to meet : "; // to whom the guest wants to meet
cin.ignore();
getline( cin , fullName );
string pathGND = "d:/HostelManager/studentDetails/groundFloor/" + fullName + ".txt";
string pathFST = "d:/HostelManager/studentDetails/firstFloor/" + fullName + ".txt";
string pathSND = "d:/HostelManager/studentDetails/firstFloor/" + fullName + ".txt";
ifstream checkStudentGND( pathGND );
ifstream checkStudentFST( pathFST );
ifstream checkStudentSND( pathSND );
string x = "Floor";
if( checkStudentGND ) {
ifstream readRoom( pathGND );
readRoom >> fullName >> fatherName >> permanentAddress >> postalAddress >> x >> roomNumberToBeAlloted_GND;
int hisRoomNumber = roomNumberToBeAlloted_GND;
readRoom.close();
storeGuestData( hisRoomNumber , fullName ); // call to store guest data
} else if( checkStudentFST ) {
ifstream readRoom( checkStudentFST );
readRoom >> fullName >> fatherName >> permanentAddress >> postalAddress >> x >> roomNumberToBeAlloted_FST;
int hisRoomNumber = roomNumberToBeAlloted_FST;
storeGuestData( hisRoomNumber , fullName ); // call to store guest data
} else if( checkStudentSND ) {
ifstream readRoom( checkStudentSND );
readRoom >> fullName >> fatherName >> permanentAddress >> postalAddress >> x >> roomNumberToBeAlloted_SND;
int hisRoomNumber = roomNumberToBeAlloted_SND;
storeGuestData( hisRoomNumber , fullName ); // call to store guest data
} else {
string sorryMSG = "Sorry ! The student is not in this hostel" cout << sorryMSG << endl ;
}
}
被叫函数:
void HostelManager::storeGuestData( int hisRoomNumber , string hisName ) {
cout << "\nVisitor's Address : "; // cin visitor address
string visitorAddress;
getline( cin , visitorAddress );
cout << "\nRelation with the student : "; // cin relation with student
string relation;
getline( cin , relation );
cout << "\nEnter Month"; // cin enter month
short month;
cin >> month;
cout << "\nEnter Date"; // cin enter date
short date;
cin >> date;
cout << "\nYou can meet " << hisName << " in room number " << hisRoomNumber << endl ;
string visitorPath = "d:/HostelManager/GuestMonitor/" + fullName + ".txt" ;
ofstream guestEntry( visitorPath );
guestEntry << "Name of Visitor : " << guestName << endl ;
guestEntry << "To meet : " << fullName << endl ;
guestEntry << "Address of visitor : " << visitorAddress << endl ;
guestEntry << "Relation with the student : " << relation << endl ;
guestEntry << "Month : " << month << endl ;
guestEntry << "Date : " << date << endl ;
guestEntry.close();
cout << "\n\n\n\nData successfully inserted";
}
数据成员:
private:
string fullName;
string fatherName;
string permanentAddress;
string postalAddress;
int mobileNumbers[2][10];
double percentageMarks;
int roomNumber;
int roomNumberToBeAlloted_GND ;
int roomNumberToBeAlloted_FST ;
int roomNumberToBeAlloted_SND ;
string preferredFloor;
string guestName;
string studentFined;
string complaintAgainst;
string receiverOfEmail;
string senderOfEmail;
string subject;
public:
void guestMonitor();
void storeGuestData( int hisRoomNumber , string hisName );
答案 0 :(得分:13)
您正在尝试复制流,这是不可能的。
为了帮助您避免这种情况,其中一个基类具有私有拷贝构造函数。
答案 1 :(得分:3)
违规行是,
ifstream readRoom( checkStudentFST );
和
ifstream readRoom( checkStudentSND );
您尝试复制现有流,而不是使用文件名打开它。
答案 2 :(得分:0)
根据您的错误,我可以猜测您是否尝试使用operator <<
(或operator >>
)为您自己的fstream
重叠ostream
或class
对象。
不知何故,您错过了operator <<
作为class
的 朋友 的功能。您的代码应该是like this snippet。请仔细查看目标public
的数据成员class
。
答案 3 :(得分:0)
如果您在构造函数中设置类参数(正在创建对象的副本),则会出现此问题,如下所示:
class Test
{
public:
Test() {}
Test(FileHandler fh_) : fh(fh_) {}
// ...
private:
FileHandler fh;
};
如果FileHandler
类包含一个文件流成员,您将收到错误,就像我一样。
解决方案:将构造函数参数从FileHandler fh_
更改为FileHandler* fh_
。