【发布时间】:2013-08-29 15:49:05
【问题描述】:
我有下面的类,它有一个vector of objects。当我使用类对象读取向量的值时,程序崩溃了。我什至尝试输入一个try block,但控制没有进入@ 987654323@.
这本书类:
class Book
{
public:
char isbn[11];
char name[50];
char author_name[50];
char pub_name[50];
char edition[10];
float cost;
char dept[10];
int count;
char id[8];
};
这是 Library 类,其中包含 vector of class Book
class Library
{
public:
char l_name[50];
char admin_name[50];
int phone_no;
char location[50];
vector<Book> v;
};
这是主要功能
int main()
{
Library lib; //LIBRARY OBJECT
Book b; //BOOK OBJECT
fstream fp("library1.bin",ios::in | ios::binary); //OPEN FILE IN READ MODE
if(!fp) cout<<"reading failed...";
try
{
fp.read(reinterpret_cast<char *>(&lib),sizeof(lib)); //READ LIBRARY DETAILS
if(fp.bad() == true) cout<<"Read failure..."<<endl;
fp.close();
cout<<"Enter ISBN number:"; cin>>b.isbn; //READ ISDN NUMBER FROM USER
for(int i=0;i<lib.v.size();i++) //CHECK WHETHER BOOK ALREADY EXISTS
{
Book b1 = lib.v[i];
if(strcmp(b1.isbn,b.isbn) == 0)
{
lib.v[i].count++;
}
}
}
catch(exception& e) //CATCH ANY EXCEPTIONS
{
cout<<"Error:"<<e.what()<<endl;
}
catch(...) //CATCH ANY UNCAUGHT EXCEPTIONS
{
cout<<"Unknown error occured:";
}
}
当我尝试检查 ISDN 号码时,程序崩溃了。
【问题讨论】:
-
解释你所说的“程序崩溃”是什么意思。你有没有附加调试器?
-
另外,你为什么用
std::vector而不是std::string? -
由于这是标记为 C++,请停止使用 C 字符串并改用
std::string。 -
没有必要全大写的 cmets。
-
@ManojKumar:如果你的学校教你直接从磁盘读取复杂的数据结构作为字节流,不考虑填充、对齐或字节序,或者教你使用
char[]而不是@ 987654332@,或者教你不要把引用当别名,或者教你在接受用户输入的时候不要检查错误……那我建议你转学!