У меня возникают проблемы с методом removeItem
потому что ошибка возникает сразу после ее removeItem
. В этом методе я пытаюсь установить член массива с помощью sku
в аргументе nullptr
и "удалить" его. Я думаю, что это имеет какое-то отношение к выравниванию: if(sku == shoppingList[i]->getSKU())
. Или, может быть, что-то делать с const
. Массив имеет указатели на объекты типа Product
.
Это принадлежит 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;
}
}
}
Это относится к Product.h
private:
std::string sku;
это принадлежит Product.cpp
const string & Product::getSKU() const
{
return sku;
}
Измените метод следующим образом
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;
}
}
}
Я думаю, что проблема в том, что вы пытались вызвать метод для указателя на Product, который уже был установлен на nullptr
Мое лучшее предположение заключается в том, что ваш код не написан для обработки записей nullptr в вашем массиве. Поскольку вы фактически не показываете, где происходит ошибка, или тип списка покупок, трудно точно сказать, что происходит. Установка std::string*
в nullptr не удалит его из массива типа std::string*
. Если вас интересует простое удаление предметов, рассмотрите другую структуру данных.