تعيين سلاسل const متساوية في الطريقة c++؟
-
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;
}
}
}
أعتقد أن المشكلة تكمن في أنك حاولت استدعاء طريقة لمؤشر للمنتج الذي تم تعيينه بالفعل على nullptr
نصائح أخرى
أفضل تخميني هو أن الكود الخاص بك غير مكتوب للتعامل مع إدخالات nullptr في صفيفك.نظرًا لأنك لا تظهر فعليًا مكان حدوث الخطأ أو نوع قائمة التسوق، فمن الصعب تحديد الخطأ الذي يحدث بالضبط.الإعداد أ std::string*
لن يؤدي nullptr إلى إزالته من مصفوفة من النوع std::string*
.إذا كنت مهتمًا بإزالة العناصر بسهولة، ففكر في بنية بيانات مختلفة.