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;
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top