Почему моя функция не передает правильное значение? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть раздел zybooks, в котором есть проблема, которая убивает меня.Следующий единственный код, который я могу изменить, - это функция createlicenseNum.

 #include <iostream>
using namespace std;

class DogLicense{
   public:
      void   SetYear(int yearRegistered);
      void   CreateLicenseNum(int customID);
      int    GetLicenseNum() const;
   private:
      int    licenseYear;
      int    licenseNum;
};

void DogLicense::SetYear(int yearRegistered) {
   licenseYear = yearRegistered;
}

// FIXME: Write CreateLicenseNum()

void DogLicense::CreateLicenseNum(int customID) {
   int licenseNum;
   int licenseYear;
   licenseNum = 0;
   licenseNum = (100000 * customID) + licenseYear;

}


int DogLicense::GetLicenseNum() const {
   return licenseNum;
}

int main() {
   DogLicense dog1;

   dog1.SetYear(2014);
   dog1.CreateLicenseNum(777);
   cout << "Dog license: " << dog1.GetLicenseNum() << endl;

   return 0;
}

Проблема в том, что при запуске GetLicenseNum () выводится 0. Я попытался добавить cout в функцию createlicenseNum, чтобыпосмотрим, чему равен licenseNum при запуске, и я получу ненулевое число, но это не правильно.Я знаю, что проблема, я думаю, связана с передачей переменных, но я теряюсь в том, как это исправить.

1 Ответ

0 голосов
/ 08 декабря 2018

Изменить на

void DogLicense::CreateLicenseNum(int customID) {
    licenseNum = (100000 * customID) + licenseYear;

}

Вы создаете теневые переменные в существующем CreateLicenseNum.Это означает, что licenseNum и licenseYear локально ограничены до CreateLicenseNum.Локальные licenseNum и licenseYear не инициализируются определенным значением, поэтому licenseYear может быть любым.

...