执行以下代码时,我不断得到"矢量迭代器不兼容":
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
的复制构造函数或析构函数有问题,那么问题可能就在那里。