我一直在使用“矢量迭代器不兼容”来执行以下代码:
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循环替换搜索,但它仍然不起作用。
为什么搜索导致错误的任何想法? 谢谢!
答案 0 :(得分:0)
您的SearchTagsCollByTagIDPredicate函数是TagCollection类的一种方法,您已将该定义放在TagCollection类头文件中或只是一个静态函数?从上下文中不清楚。可能是导致问题的原因。
答案 1 :(得分:-1)
没有太多的代码可供使用,所以我唯一能看到的不同寻常的是:
您正在使用<
来比较迭代器。不知道这对于矢量迭代器是否合法。但通常人们会写:
if (tagsIT != _DetectedTags.end())
您是通过值将参数传递给比较器函数,而不是通过引用传递。如果Tag
的复制构造函数或析构函数有问题,那么您的问题就在那里。