1
对于上课,我正在制定一个管理酒店的计划。当我的程序到达这个函数时,我得到一个运行时错误:向量迭代器不可取的。我使用调试器来查找问题区域,但我无法弄清楚它有什么问题。有什么建议么?运行时错误 - 向量迭代器不可忽略?
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))));
}
编辑:添加一个空格,以便lower_bound函数将被正确格式化为代码。
也许'ITER == customers.end()'? – quasiverse 2012-04-03 00:47:37
@quasiverse我仍然遇到同样的错误,当我尝试应用 – Mike 2012-04-03 00:57:44
像quasicverse说,我的猜测是iter指针是不正确的。另外,发布lower_bound函数会很有用。 – RStrad 2012-04-03 01:11:22