【发布时间】:2013-08-29 13:29:03
【问题描述】:
执行以下代码时,我不断收到“向量迭代器不兼容”:
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 循环替换搜索,但它仍然不起作用。
任何想法为什么搜索导致错误? 谢谢!
【问题讨论】:
-
您应该尝试将其减少到重现问题的最小代码示例。但该错误通常意味着您正在比较来自不同向量的迭代器。
-
您是否遇到编译错误?如果有,在哪一行?
-
否 - 没有出现编译错误。在运行时出现错误,而不是在运行代码时立即出现错误,而是在一段时间后。
-
另外,你应该惩罚作者使用前导下划线,如果不是通过复制代码引入,可怕的格式。
-
@AdrianWillenbücher,下划线后跟大写字母是reserved name
标签: c++ vector runtime-error