我正在尝试运行此功能:
os::TMXTileset* os::TMXMap::getTilesetFromGid(int gid)
{
TMXTileset* tileset;
std::map<std::string, TMXTileset>::iterator it;
std::map<std::string, TMXTileset>::iterator comp;
for (it=tilesetMap.begin(); it != tilesetMap.end(); it++)
{
comp = it;
comp++;
if ((gid >= it->second.getFirstGid()) && (gid < comp->second.getFirstGid()))
{
return &it->second;
}
}
tileset = &it->second;
return tileset;
}
..但它给了我这个错误:
“map / set iterator not derefrencable”
我的第一个想法是停止解除引用它(使用它 - >第二而不是(*它).second),但这根本没有改变任何东西。
有什么想法吗?
答案 0 :(得分:3)
首先复制它,然后提前复制,然后取消引用副本。这意味着只要它位于最后一个元素之前的元素上,就取消引用end()。
您可以在地图上轻松测试此内容,只有1个条目 - 它始终无法取消引用补偿。
你应该做点什么:TMXTileset* tileset;
std::map<std::string, TMXTileset>::iterator it;
std::map<std::string, TMXTileset>::iterator comp;
for (it=tilesetMap.begin(); /*it != tilesetMap.end() can be ommited due to check for comp */; it++)
{
comp = it;
comp++;
if (comp == tilesetMap.end())
{
break;
}
...
}
答案 1 :(得分:0)
如果没有中断,你的for循环会超出地图的末尾,所以你的倒数第三行会失败。