Konstantzeichenfolgen in Methode C++ gleich setzen?
-
21-12-2019 - |
Frage
Ich habe Probleme damit removeItem
Methode, da direkt nach dem Aufruf ein Fehler auftritt.Bei dieser Methode versuche ich, das Array-Mitglied mit dem festzulegen sku
im Argument zu nullptr
und „entfernen“.Ich denke, es hat etwas mit dem Ausgleich zu tun: if(sku == shoppingList[i]->getSKU())
.Oder vielleicht etwas damit zu tun const
.Das Array enthält Zeiger auf Objekte des Typs Product
.
Dies gehört zu 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;
}
}
}
Dies gehört in Product.h
private:
std::string sku;
Dies gehört zu Product.cpp
const string & Product::getSKU() const
{
return sku;
}
Lösung
Ändern Sie die Methode wie folgt
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;
}
}
}
Ich denke, dass das Problem darin besteht, dass Sie versucht haben, eine Methode für einen Zeiger auf Product aufzurufen, der bereits auf nullptr gesetzt war
Andere Tipps
Ich gehe davon aus, dass Ihr Code nicht für die Verarbeitung von Nullptr-Einträgen in Ihrem Array geschrieben ist.Da Sie nicht wirklich anzeigen, wo der Fehler auftritt oder um welche Art Einkaufsliste es sich handelt, ist es schwierig, genau zu sagen, was schief läuft.Einstellung a std::string*
to nullptr entfernt es nicht aus einem Array vom Typ std::string*
.Wenn Sie an einer einfachen Entfernung von Elementen interessiert sind, sollten Sie eine andere Datenstruktur in Betracht ziehen.