2016-06-26 10 views
0

+ =演算子の戻り値に問題があります。演算子の戻り値の問題

以下は、関連する特定のコードです。より多くのコードを表示する必要がある場合、私はそれを提供します。それがメインで実装されて

double operator+=(double b, const Account& c) 
    { 
     return b += c.getBalance(); 
    } 

for(int i = 0; i < NUMBER_OF_ACCOUNTS; i++) 
    { 
     std::cout << i+1 << "- " << (balance += *AC[i]) << std::endl; 
    } 
    std::cout << "Total Balance: " << balance << std::endl; 

出力を私は受けています:私はしようとしています

1- 10302.98 
2- 10302.98 
3- 201.00 
Total Balance: 0.00 

出力取得する:

1- 10302.98 
2- 20605.96 
3- 20806.96 
Total Balance: 20806.96 
+4

コードを強調表示するために '*'文字を使用しないでください。それはコードをもっと混乱させます。また、[mcve]を投稿してください – PaulMcKenzie

+0

なぜあなたは 'b + = c.getBalance();'を返すのですか? 'b'の値は' operator + = '関数スコープ内でのみ変更されます(' b'は参照ではなく値によって渡されるため)。あなたが本当にしたいのは、 'return b + c.getBalance();'または 'double operator + =(double&b、const Account & c);')として 'b'を渡してから、' b + = c.getBalance(); return b' – Jezor

答えて

1

あなたが参照によってbに合格する必要があります。そうしないと、何が起こるかを考える代わりに

double operator+=(double b, const Account& c) 
{ 
    return b += c.getBalance(); 
} 

double operator+=(double &b, const Account& c) 
{ 
    return b += c.getBalance(); 
} 

を、balanceの値(0)ではなく、あなたよりも、すべてのコールでコピーされますbalanceによってエイリアスされたメモリロケーションに実際に合計します。

+0

ありがとうございました! –

+0

すべてのコードではなく、最小限の例で再投稿してください:) ;) –

+1

私は以前に作業用のバージョンを提供するように言われましたが、私はまだ使用されていたフォーマットに慣れようとしています。もう一度お返事いただきありがとうございます! –