添加到私人变量不起作用
Adding to a private variable not working
我目前正在学习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
功能中,您声明了Bank
和ColaMachine
。
//ColaMachine Object
ColaMachine cola;
//Bank Object
Bank bank;
这些应该是您创建的仅有的两个Bank
和ColaMachine
对象,所以这是错误的
void ColaMachine::chooseDrink() {
Bank bo;
...
bo.askLoan();
Bank bo
是与您在main
中声明的银行完全不同的。像以前的代码一样,此Bank bo
每次致电ColaMachine::chooseDrink
时都会创建并销毁
我认为,您应该做的是传递Colamachine和Bank变量,该变量以主要参数为参考参数,将其用于您需要使用它们的其他部分。所以(例如(
void ColaMachine::chooseDrink(Bank& bank) {
...
bank.askLoan();
您对此代码有很多重写。
- 通过 get-Method 访问变量在类外不起作用
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 指针变量在 cout 函数中不起作用
- C++结构模板变量快捷方式定义不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 变量和常数的C++划分不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 为什么这个条件变量不起作用
- 在循环中更改数组的变量不起作用
- 添加到私人变量不起作用
- 全球变量不起作用Raspberry Pi
- 为什么我的加权_grade变量不起作用
- 调用函数从类返回私有变量不起作用
- 递增引用变量不起作用
- 为什么作用域解析对覆盖的变量不起作用?
- Boost::scoped_lock对局部静态变量不起作用
- 为什么<int>常量引用返回的向量变量不起作用
- OpenGL 3.3 着色器统一变量不起作用