2016-06-26 2 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();' или, возможно, передать '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

ok просто перепродан, мне сказали предоставить рабочую версию ранее, я все еще пытаюсь привыкнуть к формату, который должен был быть опубликован. Спасибо за ответ снова, это очень ценится! –

Смежные вопросы