更新 class 个变量的值 - C++

Updating value of class variables - C++

我刚开始学习如何编码,但遇到了一个我似乎无法解决的问题。 更具体地说,问题出现在“借用”功能中。

在下面的程序中,我无法更新 public class 变量“stock”的值,即使我使用了 getter 和 setter。 它似乎在 cout 上正确更新但不是“永久保存”。我的猜测是它正在修改变量的副本而不是变量本身。

我已将我的代码附加到 post!如果我应该上传整个文件,请告诉我!

提前致谢!

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

编辑 1:

这是我的 Class 结构和向量:

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;

我同意 Thomas Matthews 的评论。您当前的 Book 结构没有意义,因为大多数方法都是针对 Book 的集合而不是特定的 Book

如果您将一组书籍称为 Library,那么下面的代码对于委派 BookLibrary[= 之间完成工作的位置更有意义25=]

#include <string>
#include <vector>

using namespace std;

class Book {
public:
    int id;
    string title;
    int stock;

    // These methods operate on this particular Book instance
    int getStock() const;
    void setStock(int);
};

int Book::getStock() const {
    return stock;
}

void Book::setStock(int newstock) {
    stock = newstock;
}

class Library {
public:
    vector<Book> myBooks;

    // These methods operate on the vector of books
    void add();
    void displayall();
    void displayspecific();
    //void print(Book); // This method probably belongs inside Book
    void borrows();
    void returns();
};

int main() {
    return 0;
}

根据 Library 方法重写 borrows 意味着对 LibrarymyBooks 向量进行操作。当您在向量中找到您想要的特定 Book 时,您可以调用它的 getter 和 setter,它们应该可以正常工作

解决您的问题,在您当前的代码中,这是迭代您的 Book 并为您提供每个副本:

for(auto i:myBooks)

您希望它获得参考而不是副本:

for(auto& i:myBooks)

您的实际问题是您操作的是 Book 对象的副本,而不是书籍成员的 setter 和 getter。

for(auto i:myBooks){

你需要

for(auto &i:myBooks){

但正如其他人所指出的,您需要 2 类、图书馆和书籍。