1

我试图找出我的错误。

我正在Account用 C++ 编写课程,其中有一些方法,如credit(),debit()等。
我写了一个transfer()方法,但我得到的问题是它把“钱”从账户中扣除a1,但没有记入a2. 但是,如果我在 account.cpp 中的方法本身中打印它,它确实会显示正确的结果,而主要余额保持不变。

你能看出我的错误吗?与参考、指针等有关吗?
这是主要的:

a1.println(); 
a2.println();
cout<< "Valid parameter " << endl;
cout<< a1.transfer(a2, 13) << endl;
a1.println();
a2.println();

这是它打印的内容:

(Account(65,140))
(Account(130,100))
Valid parameter 
1
(Account(65,127))
(Account(130,100))

下面是方法的定义:

    // withdraw money from account
    bool Account::debit(int amount){
    if (amount>=0 && balance>=amount) {
        balance=balance-amount; // new balance
        return true;
    } else {
        return false;
    }
}


// deposit money
bool Account::credit(int amount){
    if (amount>=0) {
        balance=balance+amount; // new balance
        return true;
    } else {
        return false;
    }
}

bool Account::transfer(Account other, int amount){
    if (amount>=0 && balance>=amount) {
        debit(amount);
        other.credit(amount);
        //other.println();// prints corect amount
        return true;
    } else {
        return false;
    }
}
4

2 回答 2

7

这是因为您正在Account按值传递另一个。余额更改正常,但在帐户的不同实例上,这意味着副本被修改,而原始文件保持不变。

将您的代码更改为通过Account引用传递以使其工作。

bool Account::transfer(Account& other, int amount)
//                            ^
//                           HERE
于 2012-06-16T14:24:08.683 回答
1

您没有通过引用传递“其他”

 bool Account::transfer(Account& other, int amount){
于 2012-06-16T14:24:36.653 回答