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

StackOverflow https://stackoverflow.com//questions/22028527

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top