Domanda

Sto avendo problemi con il metodo removeItem perché si verifica un errore dopo che si chiama. In questo metodo sto cercando di impostare il membro dell'array con sku nell'argomento in nullptr e "Rimuovi". Penso che abbia qualcosa a che fare con la perequazione: if(sku == shoppingList[i]->getSKU()).O forse qualcosa a che fare con const.L'array ha puntatori per oggetti di tipo Product.

Questo appartiene a Customert Worker.cpp

CustomerOrder::CustomerOrder()
: shoppingList()
{

}
void CustomerOrder::removeItem(const string &sku)
{
    for(int i =0; i< 20; i++)
    {
        if(sku == shoppingList[i]->getSKU())
        {
            shoppingList[i] = nullptr;
        }
    }
}
.

Questo appartiene a Product.h

private:
std::string sku;
.

Questo appartiene al prodotto.cpp

const string & Product::getSKU() const
{
    return sku;
}
.

È stato utile?

Soluzione

Modificare il metodo il seguente modo

void CustomerOrder::removeItem( const string &sku )
{
    for( int i = 0; i < shoppingList.size(); i++ )
    {
        if( shoppingList[i] && sku == shoppingList[i]->getSKU() )
        {
            delete shoppingList[i];
            shoppingList[i] = nullptr;
        }
    }
}
.

Penso che il problema sia che hai provato a chiamare un metodo per un puntatore al prodotto che era già impostato su NULLPRR

Altri suggerimenti

La mia migliore ipotesi è che il tuo codice non è scritto per gestire le voci di NullPTR nel tuo array.Dal momento che non viene effettivamente mostrato dove si verifica l'errore o il tipo di lista della spesa, è difficile dire esattamente cosa sta andando male.Impostazione di un std::string* a NULLPTR non lo rimuoverà da una matrice di tipo std::string*.Se sei interessato a una facile rimozione di articoli, considera una struttura di dati diverse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top