0

我在使用该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;
}
4

2 回答 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

于 2014-02-25T23:47:57.757 回答
0

我最好的猜测是您的代码不是为了处理数组中的 nullptr 条目而编写的。由于您实际上并没有显示错误发生的位置或购物清单的类型,因此很难确切地说出了什么问题。将 a 设置std::string*为 nullptr 不会将其从 type 的数组中删除std::string*。如果您对轻松删除项目感兴趣,请考虑使用不同的数据结构。

于 2014-02-25T23:43:16.327 回答