Для класса, я создаю программу, управляющую отелем. Я получаю ошибку во время выполнения, когда моя программа переходит к этой функции: векторный итератор не является разыменованным. Я использовал отладчик, чтобы найти проблемную область, но я не могу понять, что с ним не так. Какие-либо предложения?Ошибка во время выполнения - векторный итератор не может быть разыменован?
Customer & ListOfCustomers::getByID(int id)
{
if(!sortedByID)sortByID();
vector<Customer>::iterator iter;
Customer cus;
cus.customerID=id;
iter = lower_bound(customers.begin(),customers.end(),cus,compareCustomersByID);
if( (*iter).customerID == id) // <---DEBUGGER SAYS ERROR HERE IN THIS LINE
{
return *iter;
}
else
{
return NullCustomer();
}
}
Вот функция lower_bound. Он находится внутри алгоритма #include
template<class _FwdIt,
class _Ty,
class _Pr> inline
_FwdIt lower_bound(_FwdIt _First, _FwdIt _Last,
const _Ty& _Val, _Pr _Pred)
{// find first element not before _Val, using _Pred
// _DEBUG_ORDER_PRED(_First, _Last, _Pred);
return (_Rechecked(_First,
_Lower_bound(_Unchecked(_First), _Unchecked(_Last), _Val, _Pred,
_Dist_type(_First))));
}
EDIT: добавлен пробел, так что функция lower_bound будет правильно отформатирован как код.
Возможно, 'ITER == customers.end()'? – quasiverse
@quasiverse Я до сих пор получаю ту же ошибку, когда я пытаюсь применить это – Mike
Как и в случае с квази-обращением, я предполагаю, что указатель iter неверен. Кроме того, было бы полезно опубликовать функцию lower_bound. – RStrad