¿Establecer cadenas constantes iguales en el método c++?
-
21-12-2019 - |
Pregunta
estoy teniendo problemas con el removeItem
método porque se produce un error justo después de llamarlo.En este método, estoy intentando configurar el miembro de la matriz con el sku
en el argumento de nullptr
y "eliminarlo".Creo que tiene algo que ver con la ecualización: if(sku == shoppingList[i]->getSKU())
.O tal vez algo que ver con const
.La matriz tiene punteros a objetos de tipo. Product
.
Esto pertenece 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;
}
}
}
Esto pertenece al Producto.h
private:
std::string sku;
esto pertenece a Product.cpp
const string & Product::getSKU() const
{
return sku;
}
Solución
Cambie el método de la siguiente manera
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;
}
}
}
Creo que el problema es que intentaste llamar a un método para un puntero al Producto que ya estaba configurado en nullptr.
Otros consejos
Mi mejor suposición es que su código no está escrito para manejar entradas nullptr en su matriz.Dado que en realidad no muestra dónde ocurre el error o el tipo de lista de compras, es difícil decir exactamente qué está fallando.Establecer un std::string*
a nullptr no lo eliminará de una matriz de tipo std::string*
.Si está interesado en eliminar elementos fácilmente, considere una estructura de datos diferente.