2016-06-26 8 views
0

Ich habe ein Problem mit einem Rückgabewert mit einem + = Operator.Operator Rückgabewert Problem

das folgende ist der spezifische Code, der verwandt wird. Wenn mehr Code gezeigt werden muss, werde ich es schaffen:

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

, wo er in der Haupt implementiert:

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; 

Ausgang Ich erhalte:

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

Ausgang ich versuche zu erhalten:

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

Verwenden Sie keine * Zeichen, um den Code hervorzuheben. Das macht den Code verwirrender. Bitte posten Sie auch eine [mcve] – PaulMcKenzie

+0

Warum geben Sie 'b + = c.getBalance();'? Der Wert von "b" ändert sich nur in "operator + =' function scope "(da" b "als Wert und nicht als Referenz übergeben wird). Ich denke, was Sie wirklich tun wollen, ist 'return b + c.getBalance();' oder vielleicht übergeben Sie 'b' als Referenz' Doppeloperator + = (double & b, const Account & c); 'und dann inkrementieren vor der Rückgabe von' b + = c.getBalance(); return b'. – Jezor

Antwort

1

Sie müssen in b anhand passieren:

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

statt

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

Andernfalls darüber nachdenken, was passiert, wird der Wert von balance (0) wird bei jedem Aufruf kopiert in, anstatt Sie Summierung zu dem Speicherplatz, der durch balance aliasiert wird.

+0

danke das hat funktioniert! –

+0

Bitte repost mit einem Minimum Beispiel anstelle von all deinem Code :) Es ist jetzt schwerer zu lesen was du fragst als '*** highlight ***'. ;) –

+1

ok gerade gepostet, mir wurde gesagt, dass ich früher eine funktionierende Version bereitstellen soll, ich versuche immer noch, mich an das Format zu gewöhnen, das früher gepostet werden sollte. Danke für die Antwort, es ist sehr geschätzt! –