Domanda

Al momento sto divertirsi cercando di imparare alcuni dei libary Boost. Attualmente sto facendo quello che immagino sarà un progetto di lavoro futuro (semestre non è ancora iniziata). Tuttavia, la questione non riguarda il problema compiti a casa, ma di Boost.

Codice:

/* 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;

uso BOOST_FOREACH al lavoro con i vettori normali con lo stesso codice esatto come sopra. Da quando ho iniziato ad usare ptr_vectors ottengo l'errore:

error C2440: '=' : cannot convert from 'Bid' to 'Bid *'

mi porta a credere che ptr_vector oscura in qualche modo il puntatore dal metodo foreach.

Se io invece scrivo

BOOST_FOREACH(Bid *bid, bids_)

ricevo quattro errori di tipo

error C2819: type 'Bid' does not have an overloaded member 'operator ->'

che fa schifo, perché so che offerta è un puntatore.

Come posso fare BOOST_FOREACH iterate correttamente il ptr_vectors?

È stato utile?

Soluzione

ptr_vector assume la proprietà di oggetti e regali ciascun oggetto heap allocata come riferimento in modo non è necessario dereferenziazione e si utilizza. invece di -> per gli utenti accesso variabili / funzioni. per es.

Bid highestBid = 0;
BOOST_FOREACH (Bid& bid, bids_)
    if (bid.GetAuction()->GetName() == auction->GetName())
        highestBid = &bid;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top