2010-02-28 4 views
2

i use visual studi 2008. (C++)создать объект в коммутационном шкафу

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

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

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

редактировать код:

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

case '2' .... 
+4

Я предлагаю вам развесить код, который вызывает вопрос – zebrabox

+1

Когда вы описываете проблему, просто «не работает» бесполезно и бессмысленно утверждение. Пожалуйста, предоставьте что-то более полезное и содержательное. Как вы пытаетесь создать свой объект? – AnT

+0

В качестве примечания, ваш пример кода не создает никаких объектов. Он объявляет функцию «myobje», которая не принимает параметров и возвращает «obj». 'obj myobje' - правильный синтаксис. –

ответ

11

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

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; 
    } 
} 
+0

+1 Ум, я испортил свой ответ. Liking yours better :) –

1

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

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

Нет проблем с if-elses.

+0

+1 для того, чтобы не иметь метки по умолчанию в операторах switch. – Arun

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; 


    } 

   

Смежные вопросы