0

为什么这会引发错误,未声明的标识符?

void IDcard::Prepare(CoatingDecorator *coating)
{
    if (select == 1) { IDcard *currentID = new Passport(); }
    else if (select == 2) { IDcard *currentID = new DriversLicence();   }

    AddPhoto();
    coating->Prepare(currentID);
    std::cout << "Total Cost: " << coating->totalCost; 
    DispenseID();
}

(特别是currentID调用时的参数coating->Prepare(currentID))。

据我所知, currentID 是在 if 语句中声明的。

在 MS VS2012 上运行,错误代码为 C2065。

4

2 回答 2

3

currentID 只存在于 if 和 else 中,在没有声明的之外,可以在 IF 之前声明,在 IF 和 Else 里面初始化。

此外,如果选择它不是 1 或 2,则它不会被初始化并且可能会导致问题,因此请确保对其进行初始化。

void IDcard::Prepare(CoatingDecorator *coating)
{
IDcard *currentID;

if (select == 1) { currentID = new Passport(); }
else if (select == 2) { currentID = new DriversLicence();   }

AddPhoto();
coating->Prepare(currentID);
std::cout << "Total Cost: " << coating->totalCost; 
DispenseID();
}
于 2014-03-31T20:58:40.620 回答
0

您可以在 if 块之外声明 currentID 以修复错误。

void IDcard::Prepare(CoatingDecorator *coating)
{
  IDcard *currentID = NULL;
  if (select == 1) { currentID = new Passport(); }
  else if (select == 2) { currentID = new DriversLicence();   }

  AddPhoto();
  coating->Prepare(currentID);
于 2014-03-31T21:00:42.617 回答