установить константные строки равными в методе c ++?

0

У меня возникают проблемы с методом 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;
}
  • 1
    Какой тип ShoppingList? и почему бы не использовать стирание / удаление идиома?
  • 0
    private: std :: array <Product *, number> shoppingList;
Теги:
error-handling

2 ответа

0
Лучший ответ

Измените метод следующим образом

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

  • 0
    большое спасибо! это сработало.
  • 0
    @ user3348712 Удачи.
0

Мое лучшее предположение заключается в том, что ваш код не написан для обработки записей nullptr в вашем массиве. Поскольку вы фактически не показываете, где происходит ошибка, или тип списка покупок, трудно точно сказать, что происходит. Установка std::string* в nullptr не удалит его из массива типа std::string*. Если вас интересует простое удаление предметов, рассмотрите другую структуру данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню