ostream 运算符<< 无法正常工作
ostream operator<< not working properly
ostream 问题
我的 ostream 运算符 << 似乎无法正常工作或其他原因
函数 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);
}
ostream 问题 我的 ostream 运算符 << 似乎无法正常工作或其他原因
函数 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);
}