создать объект в switch-case - PullRequest
       30

создать объект в switch-case

2 голосов
/ 28 февраля 2010

Я использую Visual Studio 2008. (C ++)

в моем случае переключения хотел создать объект, но я не работал.

это правильно, что я не могу создать объект в случае переключателя?

если это правильно, как лучше обойти это,

новый метод, который создает этот объект?

изменить код:

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

case '2' ....

Ответы [ 3 ]

12 голосов
/ 28 февраля 2010

Не могу точно сказать с таким расплывчатым вопросом, но я предполагаю, что вы делаете что-то вроде этого:

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 голос
/ 28 февраля 2010

Я предлагаю избегать переключения из-за этой и других проблем. Вы можете разрешить определения переменных с помощью дополнительных фигурных скобок, но это выглядит грязно и вызывает два уровня отступа. Другие проблемы заключаются в том, что вы можете использовать целочисленные / перечислимые значения только для случаев, когда оператор break нельзя использовать для прерывания цикла вне коммутатора. Забывание на разрыв также является очень распространенной ошибкой программирования, которая не может быть обнаружена компилятором (потому что это все еще допустимый код), и это приводит к трудным отладкам ошибок.

Лично я использую только switch-case со значениями enum и даже никогда с меткой по умолчанию. Это дает мне преимущество в получении предупреждения о компиляции (от GCC), если обрабатываются не все возможные значения перечисления.

Нет ничего плохого в if-elses.

0 голосов
/ 15 сентября 2017
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;


    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...