definindo strings const iguais no método c++?
-
21-12-2019 - |
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;
}
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.