c++ - Switch 语句的范围错误

标签 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;

最佳答案

这是一个常见的范围界定错误

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

关于c++ - Switch 语句的范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23318520/

相关文章:

javascript - switch 语句中的 JS 逻辑运算符 - OR、AND ('||' 、 '&&' )

c++ - .obj 解析器 + 渲染 GLUT

c++ - 使用 -fno-access-control 进行单元测试

C# 创建函数作用域

javascript - 如何在严格模式下使用上下文评估自定义 javascript 表达式?

java - switch 语句和返回值 - 如何使用 switch 来确定 JPanel 绘制

jquery - 如何为 jQuery 制作 switch case?

c++ - opengl - 三角形邻接三角形带

c++ - 我什么时候必须释放内存?

r - 'match.arg()' 函数内部的 'outer()' 有问题