私は現在、Boostライブラリのいくつかを学ぼうとして楽しんでいます。私は現在、将来の宿題プロジェクトになると思うことをやっています(学期はまだ始まっていません)。ただし、この質問は宿題の問題ではなく、ブーストに関するものです。
コード:
/* 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_)
このタイプのエラーが4つ発生します
error C2819: type 'Bid' does not have an overloaded member 'operator ->'
入札はポインタであることがわかっているので、これは最悪です。
どうすればBOOST_FOREACH
適切に反復処理できptr_vectors
ますか?