我正在尝试学习一些Boost图书馆。我目前正在做我认为未来的家庭作业项目(学期尚未开始)。然而,这个问题不是关于作业问题,而是关于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_)
我收到了类型
的四个错误 error C2819: type 'Bid' does not have an overloaded member 'operator ->'
如何让BOOST_FOREACH
在ptr_vectors
上正确迭代?
答案 0 :(得分:8)
ptr_vector获取堆分配对象的所有权,并将每个对象作为引用呈现,因此您不需要解除引用并使用。而不是 - &gt;访问成员变量/函数。 e.g。
Bid highestBid = 0;
BOOST_FOREACH (Bid& bid, bids_)
if (bid.GetAuction()->GetName() == auction->GetName())
highestBid = &bid;