为什么我的函数不能传递正确的值?

时间:2018-12-08 16:36:16

标签: c++ function parameter-passing

我有一个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 :(得分:1)

更改为此

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

}

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