是否有可能在c ++中声明一个具有不同类型的变量?

1 c++ variables initialization object

我试图声明一个这样的变量:

switch(foo){
    case 1:
        MyClass myObject();
        break;
    case 2:
        MyClass2 myObject();
        break;
    case 3:
        MyClass3 myObject();
        break;
}
Run Code Online (Sandbox Code Playgroud)

但在编译时,编译器会返回以下错误:

  • 跨越'MyClass myObject'的初始化
  • 冲突的声明'MyClass2 myObject'
  • 'myObject'先前声明为'MyClass myObject'

有什么想法解决这个问题?

Mar*_*age 6

switch声明的主体是单个范围.如果要将变量声明为单个变量,case则必须在case使用花括号中创建块:

switch (foo) {
  case 1: {
    MyClass myObject();
    break;
  }
  case 2: {
    MyClass2 myObject();
    break;
  }
  case 3: {
    MyClass3 myObject();
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您经常发现这样做,您可以考虑为每个代码创建函数,case以获得更易于理解和维护的代码:

switch (foo) {
  case 1:
    HandleCase1();
    break;
  case 2:
    HandleCase2();
    break;
  case 3:
    HandleCase3();
    break;
}
Run Code Online (Sandbox Code Playgroud)