установка константных строк равными в методе С++?
-
21-12-2019 - |
Вопрос
у меня проблемы с 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*
.Если вы заинтересованы в простом удалении элементов, рассмотрите другую структуру данных.