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
Enregistrer un commentaire