2015-05-14 6 views
0

У меня есть виртуальный метод под названием «Учетная запись обновления», в котором на основе указателя, найденного методом поиска и возвращаемого на главную, учетная запись будет соответствующим образом обновляться.Не удалось обновить атрибуты объекта?

Существует родительский класс, называемый Account, из которого берется Savings.

Однако сбережения не будут выставлять обновленный интерес и не будут интересоваться интересом.

Все счета имеют баланс и депозит не будет меняться между счетами, поэтому я вызываю метод депозита ПАММ-счета

void Savings::UpdateAccount(Date *date) 
{ 
    int interestMonths; 
    short lastYear; 
    short lastMonth; 
    float currBal; 

    //THESE GET THE CURRENT DATE - Differs from the account creation 
    //date and allows for the calculation of interest 

    lastMonth = GetAccountMonth(); 
    lastYear = GetAccountYear(); 
    currBal = GetAccountBal(); 

     if (((date -> GetYear () - lastYear) * 12 + 
      (date -> GetMonth () - lastMonth)) > 0) 
     { 
      interestMonths = ((date -> GetYear () - lastYear) * 12 + 
          (date -> GetMonth () - lastMonth)); 

      for (int index = 0; index < interestMonths; index++) 
      { 
       currBal = currBal + (currBal * interestRate); 
      } 

      //This method takes the calculated current balance, then 
      //passes it into the parent class method to update the 
      //private accountBal attribute. 

      SetBalance(currBal); 
     } 
} 

Вопрос заключается в том, что этот метод не обновляет баланс для объекта и I «Я уверен, что мой расчет процентных ставок не является проблемой.

Благодарим за помощь - теперь этот метод работает.

+1

В общем, вы можете это сделать, да. Но код, который вы опубликовали, кажется, не является источником ваших проблем, какими бы они ни были. –

+0

Итак, что произойдет, если учетная запись не будет найдена? Подсказка, что вызывающий абонент получит указатель, который он не может знать, правильно или неправильно, и попытайтесь разыменовать его. –

+0

@ lovestogame227 Вы просто сильно отредактировали вопрос. Просто заметьте: это сделает все прошлые ответы и комментарии кажущимися неуместными. – Cinch

ответ

2

Вы обновляете a баланс, но не в той учетной записи.

void Savings::UpdateAccount(Date *date)const 
{ 
    int interestMonths; 
    short lastYear; 
    short lastMonth; 
    float currBal; 
    Account myAccount; 

Здесь myAccount локальная переменная, не связанная с учетной записью, которую только что нашел (что this) ...

myAccount.SetBalance(currBal); 

... и это баланс этого счета, что вы» обновление.

Вы хотите изменить объект вы вызова функции, так что просто сказать

SetBalance(currBal); 

и удалить const из функции - вы не можете иметь функцию, которая обновляет учетную запись, но Безразлично» t изменить его.

Вам также не нужно добавлять «Savings ::» в определении Savings члена -

lastMonth = GetAccountMonth(); 
lastYear = GetAccountYear(); 
currBal = GetAccountBal(); 

должен работать нормально.

+0

Пробовал, но придумать с этой ошибкой: Несколько маркеров на этой линии \t - прохождение «константные Savings», как «это» аргумент «недействительным счета :: SetBalance (флоат)» \t выкидывает отборочные [-fpermissive] \t - Недопустимые аргументы. Кандидаты: void SetBalance (float) 'EDIT: я не полностью прочитал ваш комментарий, просто удалил const. Спасибо вам за это. – lovestogame227

+1

@ lovestogame227 Удалите 'const' из функции. – molbdnilo

+0

@molbdnilo: Вы должны уточнить свой ответ. Было бы неплохо разрешить это с помощью метода 'const', пытающегося изменить объект ;-) –

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