为什么编译器对我在上面的 "if" 语句中声明的变量说"undeclared identifier"?
Why does the compiler say "undeclared identifier" for a variable I declared in the "if" statement just above?
为什么这会抛出一个错误的、未声明的标识符?
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);
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]