2016-06-26 26 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'是通过值传递的,而不是通过引用)。我认为你真正想要做的是'返回b + c.getBalance();'或者传递'b'作为参考'double operator + =(double&b,const Account & c);'然后在返回'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

确定刚刚转贴,我被告知提前一个工作版本,我仍然试图习惯应该用于发布的格式。非常感谢您的答复,非常感谢! –