Tôi đã có này cho vòng lặp:chuyển đổi một vòng lặp for để một std :: for_each
std::vector<itemPtr>::iterator it;
for(it=items.begin(); it!=items.end(); ++it)
{
investigators.addToLeaderInventory(*it);
}
Tôi muốn chuyển nó sang một cái gì đó như thế này:
std::for_each(items.begin(), items.end(), investigators.addToLeaderInventory);
Tuy nhiên, đó dòng không biên dịch. g ++ cho tôi biết điều này:
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)]
Khó đọc, để nói rằng ít nhất. Tôi tưởng tượng giải pháp là khá đơn giản, nhưng tôi không thể tìm ra những gì g + + là phàn nàn về. Chữ ký của investigators.addToLeaderInventory()
là:
void ClassName::addToLeaderInventory(itemPtr item);
nên làm việc với for_each
, phải không? Tôi nên thay đổi điều gì?
nếu bạn sẵn sàng sử dụng tăng cường, thực hiện foreach tuyệt vời, BOOST_FOREACH – Anycorn