Hmm, you have made a major (negative) change to the ReadFromFile() ...
I try to explain ...
bool ReadFromFile(ifstream &inp, string &item, double &cost, int &quantity)
{
inp >> item; //<- extract a string from the file
inp >> cost; //<- extract a double from the file
inp >> quantity; //<- extract a int from the file
return (inp >> item >> cost >> quantity); //<- Do the above three operations again
}
So, you read two sets of items each time in that function, to remedy it you should
have it like
bool ReadFromFile(ifstream &inp, string &item, double &cost, int &quantity)
{
// extract, string, double and int from the file
// returning a value which indicates whether all three items were
// successfully extracted
return (inp >> item >> cost >> quantity);
}