我有一个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等于什么,但我得到一个非零数字,但这是不正确的。我认为我知道问题出在变量的传递上,但是我不知道如何解决它。

最佳答案

改成这个

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

}


您正在现有的CreateLicenseNum中创建阴影变量。这意味着licenseNumlicenseYear在本地范围内为CreateLicenseNum。本地licenseNumlicenseYear未初始化为特定值,因此licenseYear可以是任何值。

10-04 14:43