Question

Je vais avoir des ennuis avec la removeItem méthode car une erreur se produit juste après elle est appelée.Dans cette méthode, je suis en train de définir la matrice de membre de la sku dans l'argument de nullptr et "supprimer" il.Je pense qu'il a quelque chose à voir avec la péréquation: if(sku == shoppingList[i]->getSKU()).Ou peut-être quelque chose à faire avec const.La matrice contient des pointeurs vers des objets de type Product.

Il appartient à 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;
        }
    }
}

Cela appartient au Produit.h

private:
std::string sku;

il appartient à Product.cpp

const string & Product::getSKU() const
{
    return sku;
}
Était-ce utile?

La solution

Changer la méthode de la façon suivante

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;
        }
    }
}

Je pense que le problème, c'est que vous avez essayé d'appeler une méthode d'un pointeur vers un Produit qui a déjà été mis à nullptr

Autres conseils

Ma meilleure supposition est que votre code n'est pas écrit pour gérer nullptr entrées dans votre tableau.Puisque vous n'avez pas fait de montrer où l'erreur se produit ou le type de liste de courses, il est difficile de dire exactement ce qui ne va pas.La fixation d'un std::string* à nullptr de ne pas le supprimer à partir d'un tableau de type std::string*.Si vous êtes intéressé par un retrait facile des éléments, envisager une autre structure de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top