Switch语句的范围错误

时间:2014-04-27 01:55:59

标签: c++ scope switch-statement declaration

当我执行此switch语句时,我收到此错误:错误:'Ptr'未在此范围内声明。我不明白为什么会发生这种情况,因为我正在动态分配Ptr。如果我删除花括号,我会收到错误:'Ptr'的前一个声明为'(// Class Name)* 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;

1 个答案:

答案 0 :(得分:1)

这是一个常见的范围错误

{
  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;
}
}