0

我正在尝试定义一个迭代器来迭代我的地图以擦除它(析构函数)
我收到一个错误:不兼容的迭代器。

我的析构函数如下所示:

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;  

有什么建议么?

4

2 回答 2

2

改为使用map<const S, shared_ptr<Node<T> > >

于 2010-09-20T09:34:52.837 回答
1

您的直接问题是map<const S, Node<T>*>::iterator所谓的依赖名称:它取决于模板参数,并且理论上,可能有std::mapfor some的专门化ST它定义iterator为静态数据成员、成员函数的名称或任何。它是什么,编译器只有在实例化你的模板时才会发现。因此,您必须通过向编译器解释iterator类型名称来帮助编译器。(愚蠢,我知道,但编译器真的是那么愚蠢)。你可以通过typename在它前面放一个来做到这一点:

typename map<const S, Node<T>*>::iterator deleteIterator;

但是,您实际上在做的是错误的。您无需手动删除地图托管的元素。但。

您正在使用裸的哑指针作为地图的引用类型。谁拥有这些物品?谁负责删除它们?您可能必须遍历您的地图并(而不是删除指针)删除这些指针引用的对象。但这很容易出错,并且仍然留下关于对象生命周期的悬而未决的问题。(例如:谁对从地图中删除的对象负责?)
我强烈建议您遵循fnieto 的建议并改用智能指针。

于 2010-09-20T10:45:02.193 回答