Mise à jour de la valeur des variables de classe - C++

Je commence tout juste à apprendre à coder et j'ai rencontré un problème que je n'arrive pas à résoudre. Plus précisément, le problème se produit dans la fonction "emprunte".

Dans le programme suivant, je suis en quelque sorte incapable de mettre à jour la valeur de la variable de classe publique "stock" même si j'ai utilisé des getters et des setters. Il semble être mis à jour correctement sur le cout juste après mais pas "sauvegardé définitivement". Je suppose qu'il modifie une copie de la variable plutôt que la variable elle-même.

J'ai joint mon code au post! S'il vous plaît laissez-moi savoir si je dois télécharger le fichier entier!

Merci d'avance!

void Book::borrows() {
int searchid;
bool isfound=false;
cout<<"Please enter the unique ID of the book:\t\t";
cin>>searchid;
for(auto i:myBooks){
if (i.id==searchid){
cout<<"This book matches your search:\t"; print(i);
if (i.stock==0) {
cout<<"Book is out of stock!"<<endl;
} else {
setStock((i.stock-1));
cout<<"Successfully borrowed!! Now there are only "<<getStock()<<" copies left in stock!"<<endl;
}
isfound=true;
}
}
if (isfound== false){
cout<<"++++\t\tBook not found++++\t\t"<<endl;
}
system("pause");
}
int Book::getStock() const {
return stock;
}
void Book::setStock(int newstock) {
Book::stock = newstock;
}

Édition 1 :

Voici ma structure de classe et mon vecteur :

class Book{
public:
int id;
string title;
int stock;
void add();
void displayall();
void displayspecific();
void print(Book);
void borrows();
void returns();
int getStock() const;
void setStock(int stock);
};
vector<Book> myBooks;


Solution du problème

Votre problème réel est que vous opérez sur une copie de l'objet Book, pas sur les setters et les getters des membres d'un livre.

for(auto i:myBooks){

Vous avez besoin

for(auto &i:myBooks){

Mais comme d'autres l'ont souligné, vous avez besoin de 2 classes, Library et Book.

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"