我有这样的循环:转换for循环一个std :: for_each的
std::vector<itemPtr>::iterator it;
for(it=items.begin(); it!=items.end(); ++it)
{
investigators.addToLeaderInventory(*it);
}
我想将它转化成这样的:
std::for_each(items.begin(), items.end(), investigators.addToLeaderInventory);
然而,行不编译。 g ++显示了我:
error: no matching function for call to
‘for_each(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >, <unresolved overloaded
function type>)’
/usr/include/c++/4.4/bits/stl_algo.h:4194: note: candidates are: _Funct
std::for_each(_IIter, _IIter, _Funct) [with _IIter =
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >, _Funct = void
(yarl::party::Party::*)(yarl::itemPtr)]
难以阅读,至少可以说。我想这个解决方案非常简单,但我无法弄清楚g ++在抱怨什么。的investigators.addToLeaderInventory()
签名是这样的:
void ClassName::addToLeaderInventory(itemPtr item);
应该有for_each
工作,不应该吗?我应该改变什么?
如果你愿意用升压,有优秀的foreach执行,BOOST_FOREACH – Anycorn 2010-07-11 02:09:05