【发布时间】:2015-04-11 19:54:12
【问题描述】:
我在从类中的 std::map 返回项目时遇到问题。 我正在尝试创建一个简单的函数,例如
ExplorerObjectMapItem* MyClass::getFirst()
{
mInternalMapIterator = mObserverLookup.begin();
ExplorerObjectMapItem* item = &*mInternalMapIterator;
return item;
}
使用以下类型定义的地方
typedef map< Subject*, shared_ptr<ExplorerObject> > ExplorerObjectMap;
typedef pair<Subject*, shared_ptr<ExplorerObject> > ExplorerObjectMapItem;
typedef ExplorerObjectMap::iterator ExplorerObjectIter;
map 和 iterator 是类成员:
ExplorerObjectMap mObserverLookup;
ExplorerObjectIter mInternalMapIterator;
上面的 getFirst() 函数代码给出了一个编译错误提示
E2034 Cannot convert 'pair<Subject * const,boost::shared_ptr<ExplorerObject>
> *' to 'ExplorerObjectMapItem *'
不确定这里发生了什么。任何帮助表示赞赏。
【问题讨论】:
-
附带说明 - 将键作为指针的映射非常容易出错。一个这样的错误是对指针值进行查找,并且该指针值不再有效。
-
我明白了。该地图用于主题/观察者模式。主题消失后,我在正确移除观察者时遇到了问题。该地图有助于我在主题死亡时将主题指针设置为空。然后随后的“挤压”功能通过地图,删除所有观察者,其中主题为空,最终删除项目本身。现在不确定如何更改它..
标签: c++ dictionary std