添加到私人变量不起作用

Adding to a private variable not working

本文关键字:变量 不起作用 添加      更新时间:2023-10-16

我目前正在学习C ,并试图制作自动售货机!我知道我的代码真的很糟糕,对此我感到抱歉。我正在尝试实施银行,并让用户从中贷款,唯一的问题是银行无法向用户添加资金。这是我的代码。

void Bank::askLoan() {
//ColaMachine object
ColaMachine cola;
bool loanGranted = false;
cout << string(100, 'n');
cout << "You do not have enough money!nn";
cout << "Would you like to take a loan?nn(1)-Yesn(2)-Nonnn";
int choice;
cin >> choice;
switch (choice) {
case 1:
    //Print the bank menu!
    printBank();
    while (loanGranted != true) {
        cout << "Enter the amount to lend: $";
        cin >> _loanValue;
        //Test if _loanValue is less than or = to bankmoney, so they would scam the bank.
        if (_loanValue <= _bankMoney) {
            //Supposed to add money to the user.
            cola.addMoney(_loanValue);
            break;
        }
        else {
            cout << "You entered too much! Try again..." << endl;
        }
    }
    break;
case 2:
    //User does not want to take a loan! Quit the game!
    //Not implemented, yet.
    break;
default:
    cout << "Bad input! Please retry..." << endl;
}

}

如果输入的金额在正确的范围内,则调用Colamachine类的AddMoney((func。

void ColaMachine::addMoney(int money) {
//This part doesnt seem to modify the actual value
//Whenever It goes back to the main game loop it doesnt change.
_money += money;

}

我理解的 =与_money = _money Money;

相同

我在这里做错了什么?Github上的全部来源 - https://github.com/rohukas/-learningcpp

问题在于,您正在创建askLoan()方法中的新可乐对象,该方法在函数末尾被破坏,因此请致电addMoney()方法修改了该临时COLA对象的状态。一种选择是通过指向askLoan()方法的指针提供可乐对象。例如,在ColaMachine::chooseDrink()中,您将调用bo.askLoan(this)this是指调用bo.askLoan()的对象的指针。您需要修改askLoan()签名: void askLoan(ColaMachine * cola)并从askLoan()本身删除ColaMachine cola;

问题在这里

void Bank::askLoan() {
//ColaMachine object
ColaMachine cola;
bool loanGranted = false;
...

每次调用Bank::askLoad时,您都会创建一个新的ColaMachine,这就是上述代码所说的。但是问题在于,当您退出Bank::askLoan并且ColaMachine被销毁时,ColaMachine的任何更改都会被抛弃。这就是为什么您对ColaMachine的更改不粘贴的原因。

相反,您每次调用Bank::askLoad时都需要使用相同的ColaMachine。我不能说如果不看到其余的代码,我不能说最好的方法,但是一种方法是将ColaMachine作为参考参数传递给Bank::askLoad

void Bank::askLoan(ColaMachine& cola) {
bool loanGranted = false;
...

另一种方法是使ColaMachine Bank的类成员变量

class Bank
{
    ...
    void askLoan();
private:
    ColaMachine cola;
};

哪个更好?不知道。我认为您需要阅读课堂设计,以及程序中的对象应如何相互关系。这似乎是您目前还没有得到的。

==================================================================================

查看了您的完整代码,我可以看到您在多个地方犯了同样的错误。在您的main功能中,您声明了BankColaMachine

//ColaMachine Object
ColaMachine cola;
//Bank Object
Bank bank;

这些应该是您创建的仅有的两个BankColaMachine对象,所以这是错误的

void ColaMachine::chooseDrink() {
    Bank bo;
    ...
    bo.askLoan();

Bank bo与您在main中声明的银行完全不同的。像以前的代码一样,此Bank bo每次致电ColaMachine::chooseDrink时都会创建并销毁

我认为,您应该做的是传递Colamachine和Bank变量,该变量以主要参数为参考参数,将其用于您需要使用它们的其他部分。所以(例如(

void ColaMachine::chooseDrink(Bank& bank) {
    ...
    bank.askLoan();

您对此代码有很多重写。