Pergunta

Estou tendo problemas com o removeItem método porque ocorre um erro logo após ele ser chamado.Neste método, estou tentando definir o membro do array com o sku no argumento para nullptr e "remover" isso.Acho que tem algo a ver com a equalização: if(sku == shoppingList[i]->getSKU()).Ou talvez algo a ver com const.A matriz possui ponteiros para objetos do tipo Product.

Isso pertence a CustomerOrder.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;
        }
    }
}

Isso pertence a Product.h

private:
std::string sku;

isso pertence a Product.cpp

const string & Product::getSKU() const
{
    return sku;
}
Foi útil?

Solução

Altere o método da seguinte maneira

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;
        }
    }
}

Acho que o problema é que você tentou chamar um método para um ponteiro para Produto que já estava definido como nullptr

Outras dicas

Meu melhor palpite é que seu código não foi escrito para lidar com entradas nullptr em sua matriz.Como você não mostra onde ocorre o erro ou o tipo de lista de compras, é difícil dizer exatamente o que está errado.Definir um std::string* para nullptr não irá removê-lo de uma matriz do tipo std::string*.Se você estiver interessado na remoção fácil de itens, considere uma estrutura de dados diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top