“开关”语句的作用域错误

Scope Errors with Switch statement

本文关键字:作用域 错误 语句 开关      更新时间:2023-10-16

当我执行此switch语句时,我收到此错误:错误:未在此范围内声明"Ptr"。我不明白为什么会发生这种情况,因为我正在动态分配 Ptr。如果我删除大括号,我会收到错误:"Ptr"之前有一个声明为"(//类名(* Ptr"。我该如何解决这个问题?谢谢。

switch(i){
    case 0:{
        Class0* Ptr = new Class0;
    }
    case 1:{
        Class1* Ptr = new Class1;
        break;
    }
    case 2:{
        Class2* Ptr = new Class2;
        break;
    }
    case 3:{
        Class3* Ptr = new Class3;
        break;
    }
    case 4:{
        Class4* Ptr = new Class4;
        break;
    }
    case 5:{
        Class5* Ptr = new Class5;
        break;
    }
}
myMap["key"] = Ptr;

这是一个常见的范围错误

{
  int j =1;
}
cout<<j<<endl;

j 的值只能在括号内访问,不能在括号外访问,即 cout 语句会给出错误。您可以对任务使用以下解决方法。

switch(i){
case 0:{
    Class0* Ptr = new Class0;
    myMap["key"] = Ptr;
    break;
}
case 1:{
    Class1* Ptr = new Class1;
    myMap["key"] = Ptr;
    break;
}
case 2:{
    Class2* Ptr = new Class2; myMap["key"] = Ptr;
    break;
}
case 3:{
    Class3* Ptr = new Class3;  myMap["key"] = Ptr;
    break;
}
case 4:{
    Class4* Ptr = new Class4;  myMap["key"] = Ptr;
    break;
}
case 5:{
    Class5* Ptr = new Class5;  myMap["key"] = Ptr;
    break;
}
}