我正在尝试定义一个迭代器来迭代我的地图来擦除它(析构函数)
我收到一个错误:不兼容的迭代器。
我的析构函数看起来像这样:
Consortium<S,T>::~Consortium()
{
map<const S, Node<T>*>::iterator deleteIterator;
for (m_consortiumMap.begin() ; deleteIterator != m_consortiumMap.end() ; deleteIterator++)
m_consortiumMap.erase(deleteIterator);
}
我这样创作:
Consortium<string, Vehicle*> check;
有什么建议吗?
答案 0 :(得分:2)
改为使用map<const S, shared_ptr<Node<T> > >
。
答案 1 :(得分:1)
你当前的问题是map<const S, Node<T>*>::iterator
是一个所谓的依赖名称:它取决于模板参数,理论上可能有{{1}的特化对于某些std::map
,S
,它将T
定义为静态数据成员,成员函数的名称或其他。它是什么,编译器只在实例化模板时发现。因此,您必须通过向其解释iterator
是类型的名称来帮助编译器。 (傻,我知道,但编译器确实是那么愚蠢)。你可以在它前面放一个iterator
:
typename
然而,你实际做的是错的。您无需手动删除地图托管的元素。但。
你使用裸露的哑指针作为地图的引用类型。谁拥有这些物品?谁负责删除它们?您可能需要浏览地图(而不是删除指针)删除这些指针引用的对象。但这容易出错,并且仍然存在关于对象生命周期的开放性问题。 (比如:谁对从地图上删除的物品负责?)
我强烈建议您关注fnieto's advice并使用智能指针代替。