C++linux获取向量迭代器不兼容
C++ linux getting vector iterators incompatible
执行以下代码时,我不断得到"矢量迭代器不兼容":
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
的复制构造函数或析构函数有问题,那么问题可能就在那里。
相关文章:
- 不明白迭代器,引用和指针失效,一个例子
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 我从 std::set 得到const_iterator而不是迭代器
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 对于使用 C 样式指针矢量化的循环,但不使用迭代器
- 使用循环(而不是迭代器)从向量中删除指针
- 将指针而不是迭代器传递到std ::复制
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- C++模板不接受迭代器
- 容器不可知迭代器参数
- 为什么 void* 不是迭代器类型?
- 如何在不使用迭代器的情况下访问任何向量的第 i 个元素
- 为什么在达到容量后在向量中插入时,C++不处理迭代器?
- 我可以用cout而不是迭代器循环打印STL映射吗?
- 为什么 std::bitset 不附带迭代器?
- 字符串::擦除不接受迭代器?
- 是否有一个标准容器允许在不使迭代器无效的情况下插入元素