سؤال

أواجه مشكلة مع 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;
        }
    }
}

أعتقد أن المشكلة تكمن في أنك حاولت استدعاء طريقة لمؤشر للمنتج الذي تم تعيينه بالفعل على nullptr

نصائح أخرى

أفضل تخميني هو أن الكود الخاص بك غير مكتوب للتعامل مع إدخالات nullptr في صفيفك.نظرًا لأنك لا تظهر فعليًا مكان حدوث الخطأ أو نوع قائمة التسوق، فمن الصعب تحديد الخطأ الذي يحدث بالضبط.الإعداد أ std::string* لن يؤدي nullptr إلى إزالته من مصفوفة من النوع std::string*.إذا كنت مهتمًا بإزالة العناصر بسهولة، ففكر في بنية بيانات مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top