ostream问题 我的ostream运算符<<似乎没有工作或其他什么
答案 0 :(得分:2)
函数Customer::getHash
中存在逻辑错误。这可能无法解决您的问题,但无论如何都应该修复。
int Customer::getHash(int hash)
{
string key = getLastname();
cout<<"key: "<<key<<endl;
// getFirstname();
// getID();
int i = 0;
// int j = 0;
// int k = 0;
for (i = 0; i < key.length(); i++)
{
i += (int)key[i]; // Problem.
// At this time, i may be greater than key.length().
}
// getFirstname();
// getID();
return i = i % hash;
}
您可以使用其他变量来保存临时哈希值。
int Customer::getHash(int hash)
{
string key = getLastname();
cout<<"key: "<<key<<endl;
int tempHash = 0;
int i = 0;
for (i = 0; i < key.length(); i++)
{
tempHash += (int)key[i];
}
return tempHash % hash;
}
<强>更新强>
在您发布的代码中,您已在函数
中注释掉了return语句istream &operator >> (istream &in, Customer &obj)
作为副作用,
的行为 while (inputFile >> newCustomer)
未定义。
取消注释该行
//return in;
在函数中。这将解决另一个错误。希望这是最后一个。
更新2
您正在while
循环中阅读太多信息。
// This line reads all the information of one customer
while (inputFile >> newCustomer)
{
//inputFile >> newCustomer;
string lastname;
// PROBLEM
// Now you are reading data corresponding to the next customer.
getline (inputFile, lastname, ' ');
while (inputFile.peek() == ' ')
inputFile.get();
string firstname;
getline (inputFile, firstname, ' ');
while (inputFile.peek() == ' ')
inputFile.get();
string id;
getline (inputFile, id);
buildCustomerList(cHeadPtr, cTailPtr, lastname, firstname, id);
customer.insert(newCustomer);
//cout<<lastname<<endl;
//cout<<firstname<<endl;
//cout<<id<<endl;
}
将其更改为:
while (inputFile >> newCustomer)
{
string lastname = newCustomer.getLastname();
string firstname = newCustomer.getFirstname();
string id = newCustomer.getID();
buildCustomerList(cHeadPtr, cTailPtr, lastname, firstname, id);
customer.insert(newCustomer);
}