C ++ linux得到的矢量迭代器不兼容

时间:2013-08-29 13:29:03

标签: c++ vector runtime-error

我一直在使用“矢量迭代器不兼容”来执行以下代码:

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循环替换搜索,但它仍然不起作用。

为什么搜索导致错误的任何想法? 谢谢!

2 个答案:

答案 0 :(得分:0)

您的SearchTagsCollByTagIDPredicate函数是TagCollection类的一种方法,您已将该定义放在TagCollection类头文件中或只是一个静态函数?从上下文中不清楚。可能是导致问题的原因。

答案 1 :(得分:-1)

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

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

    if (tagsIT != _DetectedTags.end())

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