Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取错误:向量迭代器不兼容_C++ - Fatal编程技术网

C++ 获取错误:向量迭代器不兼容

C++ 获取错误:向量迭代器不兼容,c++,C++,我正在为管理一家酒店的班级制作一个节目。我能够成功地为客户办理入住手续。但是,当我试图从房间中签出客户时,会出现一个运行时错误:向量迭代器不兼容。我运行了调试器,并说问题出现在while循环的condition语句中,但我无法找出问题所在(我认为我正确使用了调试器)。我试着看其他有类似错误的帖子,但我没能找到解决办法。有人能帮忙吗 void Customer::removeRoomID(int rID) { vector<int>::iterator iter; it

我正在为管理一家酒店的班级制作一个节目。我能够成功地为客户办理入住手续。但是,当我试图从房间中签出客户时,会出现一个运行时错误:向量迭代器不兼容。我运行了调试器,并说问题出现在while循环的condition语句中,但我无法找出问题所在(我认为我正确使用了调试器)。我试着看其他有类似错误的帖子,但我没能找到解决办法。有人能帮忙吗

void Customer::removeRoomID(int rID)
{
    vector<int>::iterator iter;
    iter = roomsCheckedInto.begin();
    while(iter != roomsCheckedInto.end())   // <--DEBUGGER SAYS ERROR IN THIS LINE - ERROR: VECTOR ITERATOR INCOMPATIBLE
    {
        if(*iter==rID)
        {
            roomsCheckedInto.erase(iter);
        }
    }
}
void客户::删除oomid(int-rID)
{
向量:迭代器iter;
iter=roomsCheckedInto.begin();

而(iter!=roomsCheckedInto.end())/
std::vector
迭代器在执行
擦除操作后失效

尝试将代码更改为:

void Customer::removeRoomID(int rID)
{
   vector<int>::iterator iter;
   iter = roomsCheckedInto.begin();
   while(iter != roomsCheckedInto.end())   
   {
       if(*iter==rID)
       {
           // iter should now be set to the value
           // returned from the erase() method.
           iter = roomsCheckedInto.erase(iter);
       }
       else
       {
          ++iter;
       }
   }
}
void客户::删除oomid(int-rID)
{
向量:迭代器iter;
iter=roomsCheckedInto.begin();
while(iter!=roomsCheckedInto.end())
{
if(*iter==rID)
{
//iter现在应设置为该值
//从erase()方法返回。
iter=roomsCheckedInto.erase(iter);
}
其他的
{
++iter;
}
}
}

首先,你必须在某个地方增加iter,否则你将永远无法到达roomsCheckedInto的末尾-也就是说,你将有一个无限循环

第二,擦除使iter失效

相反,将while循环替换为:

while(iter != roomsCheckedInto.end())
{
   if(*iter==rID) iter = roomsCheckedInto.erase(iter);
   ++iter;
}

还有,这是家庭作业吗?如果是,标记为such=)

您没有在任何地方推进迭代器

你需要在某个时候做
++iter
,否则你的while循环将是无止境的

另外,不要忘记
。erase
会使迭代器无效,因此不能在erase之后简单地前进。
如果id匹配,请执行
iter=roomsCheckedInto.erase(iter);

您的循环是错误的。您将iter从第二个减到最后,这将导致错误。谢谢!这解决了问题。我没有意识到++iter必须在else{}中运行。这是有意义的。我建议使用。