gpt4 book ai didi

c++ - 在 Ptr_Vector 上 boost FOR_EACH?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:51 25 4
gpt4 key购买 nike

我目前正在尝试学习一些 Boost 库,这很有趣。我目前正在做我想会成为 future 家庭作业的项目(学期尚未开始)。不过这道题不是作业的问题,而是关于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 使用与上面完全相同的代码来处理法 vector 。自从我开始使用 ptr_vectors 以来,我得到了错误:

错误 C2440:“=”:无法从“出价”转换为“出价 *”

让我相信 ptr_vector 以某种方式掩盖了 foreach 方法中的指针。

如果我改写

BOOST_FOREACH(Bid *bid, bids_)

我得到了四个类型的错误

错误 C2819:类型“Bid”没有重载成员“operator ->”

这很糟糕,因为我知道出价是一个指针。

如何使 BOOST_FOREACH 正确迭代 ptr_vectors

最佳答案

ptr_vector 获取堆分配对象的所有权,并将每个对象作为引用呈现,因此您不需要解引用,您可以使用 .而不是 -> 来访问成员变量/函数。例如

Bid highestBid = 0;
BOOST_FOREACH (Bid& bid, bids_)
if (bid.GetAuction()->GetName() == auction->GetName())
highestBid = &bid;

关于c++ - 在 Ptr_Vector 上 boost FOR_EACH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com