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);
 }