2015-02-23 3 views
0

вопросы ostream Мой ostream оператор < <, кажется, не работает или что-то ещеostream оператора << не работает должным образом

+0

ммм, я хотел бы представить (целое) ключ [я] может дать вам мусор данных из-за несоответствия размера ... – hanshenrik

+0

мой размер 512, и размер который входит в getHash - 512. Что бы вы предложили? Спасибо – kris

ответ

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

Update

В Опубликованная коде, вы закомментировал оператор возврата в функции

istream &operator >> (istream &in, Customer &obj) 

В качестве побочного эффекта, поведение

while (inputFile >> newCustomer) 

не определено.

Раскоментируйте линия

//return in; 

в функции. Это исправит еще одну ошибку. Надеюсь, это последний.

Update 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); 
} 
+0

О, я вижу свою ошибку. Благодаря! Правильно ли работает мой цикл for? Мне кажется, что здесь есть что-то очень простое, но я не могу его поймать !! Спасибо – kris

+0

@kris, цикл 'for' выглядит хорошо для меня. –

+0

@R Sahu, я отправил свою полную программу. Я думаю, может быть, когда я читаю файл и устанавливаю свои данные, что-то не так? – kris