paramètre const chaînes de l'égalité dans la méthode c++?
-
21-12-2019 - |
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;
}
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.