C++linux获取向量迭代器不兼容

C++ linux getting vector iterators incompatible

本文关键字:不兼容 迭代器 向量 获取 C++linux      更新时间:2023-10-16

执行以下代码时,我不断得到"矢量迭代器不兼容":

Tag Som::UpdateAfterTagMessageExciter(string detectedTagID, unsigned char ReaderID, unsigned char antData, SSensors Sensors,bool staff, int BatLevel, int RSSI, int temperature)
{
        tagsIT = search (m_DetectedTags.begin(), m_DetectedTags.end(), searchTag,              
                             searchTag+1,TagCollection::SearchTagsCollByTagIDPredicate);
        if (tagsIT<m_DetectedTags.end())
        {
                 //do something
        }

SearchTagsCollByTagIDPredicate如下所示:

static bool SearchTagsCollByTagIDPredicate (Tag i, string tagID) 
     {
        string secondTag=  i.GetTagID();
        return (tagID==secondTag);
      }

其中m_DetectedTags矢量未在此块之外使用。每当LF天线检测到标签时,都会重复调用该函数。它就发生在搜索的调用中。我试着调试,但没有成功。

我试着用一个简单的for循环代替搜索,但它仍然不起作用。

知道为什么搜索会导致错误吗?谢谢

您的SearchTagsCollByTagIDRedicate函数是TagCollection类的一个方法,您已将其定义放入TagCollection类头文件中,还是只是一个静态函数?从上下文来看并不清楚。这可能就是造成问题的原因。

没有太多代码可供使用,所以我能看到的唯一不同寻常的是:

  • 您正在使用<来比较迭代器。不知道这对向量迭代器是否合法。但通常人们会写:

    if (tagsIT != _DetectedTags.end())

  • 您通过值而不是通过引用将参数传递给比较器函数。如果Tag的复制构造函数或析构函数有问题,那么问题可能就在那里。