В настоящее время я получаю удовольствие, пытаясь выучить некоторые из библиотеки Boost.В настоящее время я делаю то, что, я думаю, будет будущим домашним заданием (семестр еще не начался).Однако этот вопрос не о задаче домашнего задания, а о Boost.
Code:
/* AuctionApplication.h */
class AuctionApplication : boost::noncopyable
{
private:
boost::ptr_vector<Auction> auctions_;
boost::ptr_vector<Bidder> bidders_;
boost::ptr_vector<Bid> bids_;
/* AuctionApplication.cpp */
Bid *AuctionApplication::GetLatestBid(const Auction *auction)
{
Bid *highestBid = 0;
BOOST_FOREACH(Bid *bid, bids_) // Error here!
if (bid->GetAuction()->GetName() == auction->GetName())
highestBid = bid;
BOOST_FOREACH используется для работы с нормальными векторами с точно таким же кодом, как указано выше.С тех пор как я начал использовать ptr_vectors, я получаю сообщение об ошибке:
error C2440: '=' : cannot convert from 'Bid' to 'Bid *'
. Это наводит меня на мысль, что ptr_vector каким-то образом скрывает указатель от метода foreach.
Если я вместо этого напишу
BOOST_FOREACH(Bid *bid, bids_)
, я получу четыре ошибки типа
error C2819: type 'Bid' does not have an overloaded member 'operator ->'
, которые отстой, потому что я знаю, что ставка являетсяуказатель.
Как я могу сделать BOOST_FOREACH
итерацию правильно по ptr_vectors
?