在switch-case中创建一个对象

时间:2010-02-28 17:51:16

标签: c++ object switch-statement

我使用visual studi 2008.(c ++)

在我的交换机案例中,我想创建一个对象,但我不会工作。

是不是我在交换机案例中无法创建对象?

如果这是对的,那么解决它的最佳方法是什么,

创建该对象的新方法?

编辑代码:

switch (causwahl){
case '1':
cAccount *oAccount = new cAccount (ID);

case '2' ....

3 个答案:

答案 0 :(得分:12)

我无法用这么模糊的问题说出来,但我猜你正在做这样的事情:

switch(foo)
{
case 1:
  MyObject bar;
  // ...
  break;

case 2:
  MyObject bar;
  // ...
  break;
}

这是不允许的,因为每个case语句具有相同的范围。如果要使用相同的变量名,则需要提供更多范围:

switch(foo)
{
case 1:
  {
    MyObject bar;
    // ...
    break;
  }

case 2:
  {
    MyObject bar;
    // ...
    break;
  }
}

答案 1 :(得分:1)

由于这个问题和其他问题,我建议避免使用switch-case。您可以通过额外的花括号来允许变量定义,但这看起来很混乱并导致两个级别的缩进。其他问题是你只能使用整数/枚举值来表示break语句不能用来断开交换机外的循环。忘记中断也是编译器无法检测到的一个非常常见的编程错误(因为它仍然是有效代码),并且导致难以调试错误。

就个人而言,我只使用带有枚举值的switch-case,甚至从不使用默认标签。如果不能处理枚举的所有可能值,这样可以让我收到编译警告(来自GCC)。

if-elses没有错。

答案 2 :(得分:0)

switch (choice)
    {
    case 1:
        {
            cout<<"\nBike object created********"<<endl;
            Bike B1(2,4,50);
            V=&B1;
            V->Display_Details();

            V->CallToll(persons);
           break;
      }

    case 2:
       {  
            cout<<"\n CAR object created********"<<endl;
            Car C1(4,8,50);
            V=&C1;
            V->Display_Details();
            V->CallToll(persons);

         break;

       }
     default:
           cout<<"You have entered an invalid choice...........Please Enter valid choice........"<<endl;


    }