为什么编译器对我在上面的 "if" 语句中声明的变量说"undeclared identifier"?

Why does the compiler say "undeclared identifier" for a variable I declared in the "if" statement just above?

本文关键字:声明 变量 identifier undeclared if 编译器 在上面 为什么 语句      更新时间:2023-10-16

为什么这会抛出一个错误的、未声明的标识符?

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();
}

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

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

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

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();
}

您可以在 if 块之外声明当前 ID 以修复错误。

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);