我已经尝试了一个多星期但仍然卡住了。我甚至四处寻找解决方案,但仍然无处可去。谁能帮我?我也是Stack Overflow的新手。我发布了我认为合理的内容,而不是整个程序。
我的程序基本上是一个图书馆管理系统。我可以完美地编辑,添加和删除书籍,但在添加用户的客户时却不能。
我有一个结构Customer
,我从一个文件读取并将数据传输到Customer
个对象的数组。但在我的main
中,当我调用方法addCustomer
时,我看到Debug Assertion失败了!
它说:
Debug Assertion Failed!
Program: C:\Windows\system 32\MSVCP120D.dll
File: c\program files (x86)\microsoft visual studio 12.0\vc\xstring
Line: 1168
Expression: invalid null pointer.
我的代码:
struct Customer{
string first = "",
last = "",
id = "",
phonenumber = "",
email = "",
BookID = "",
return_date = "";
};
将信息添加到数组
void FileToArray(int& index, Customer library[]){
ifstream readCustomers;
readCustomers.open("CustomerDatabase.txt");
int i = 0;
// transfer file to array for customers
while (readCustomers >> library[i].id >> library[i].first >> library[i].last >> library[i].email
>> library[i].phonenumber >> library[i].BookID >> library[i].return_date)
{
i++;
}
index = i;
readCustomers.close();
}
添加客户
void addCustomer(int& index, Customer library[]){
/*
Adds customer to the database
*/
//Declarations
string firstName, lastName, email;
string phonenumber, NumBorrowed = 0;
// Get required input
cout << "First Name:" << endl;
cin.ignore(100, '\n');
getline(cin, firstName);
cout << "Last Name:" << endl;
getline(cin, lastName);
cout << "Email:" << endl;
getline(cin, email);
cout << "Phone Number:" << endl;
getline(cin, phonenumber);
// add to array for books
//LibraryCustomers[index].id = id;
library[index].first = firstName;
library[index].last = lastName;
library[index].email = email;
library[index].phonenumber = phonenumber;
library[index].BookID = "0";
library[index].return_date = "0";
index++;
}
主要
int main(){
int CustomerAddCount = 0; // Will keep track of the last index that has been added.
Customer LibraryCustomers[1024]; // Transfering the data from file to array
FileToArray(CustomerAddCount,LibraryCustomers);
addCustomer(CustomerAddCount,LibraryCustomers);
return 0;
}
由于
答案 0 :(得分:0)
这是有问题的一行:
string phonenumber, NumBorrowed = 0;
查看变量的类型:它们都是std::string
个对象。
std::string
没有构造函数可以使用int
。但它确实有一个const char*
。这意味着0
被解释为空指针常量,用于创建空const char*
,并传递给std::string
的构造函数。 constructor有一个前提条件,即它的参数指向一个有效的,以空字符结尾的字符串。情况并非如此,因此程序崩溃(实际上是断言)。
当然,在调试器中单步执行程序会告诉你。