2017-02-17 2 views
0

Так что я просто перебираю классы, но я получил эту ошибку, которая останавливает меня пустым. Я просмотрел другие темы, но не знаю, что не так с моим кодом? Я прокомментировал код, который является проблемой.Передача управления обходит инициализацию :?

class myClass { //Class which might cause an issue? Don't see whats wrong with it. 
public: 
myClass(string nm) { 
    setName(nm); 
} 
void setName(string x) { 
    name = x; 
} 
string getName() { 
    return name; 
} 

частный: название строки; };

int main() { 
cout << "Task 1, Task 2, Task 3, Task 4 ?" << endl; 
int answer; 
cin >> answer; 
switch (answer) 
{ 
case 1://Practising Classes 
    CRectangle area; 
    cout << "Enter two numbers \n"; 
    cin >> area.x; 
    cin >> area.y; 
    cout << "Area is: "<< area.findArea() << endl; 
    break; 
case 2://Practising Classes 
    AddNumbers myObj1; 
    myObj1.getNumbers(); 
    cout << myObj1.addNumbers() << endl; 
case 3: //Practising Classes 
    birthdays b1; 
    cout << "Welcome to Birthdays! \n"; 
    bool bool1 = false; 
    do { 
    cout << "Do you want to enter some data (1) or retieve some? \n"; 
    int answer; 
    cin >> answer; 
    switch (answer) 
    { 
    case 1: 
     b1.setdata(); 
     break; 
    case 2: 
     b1.getdata(); 
    } 
    } while (bool1 == false); 
case 4: // This causes the error. // Testing out Constructors 
    myClass object("David"); 
    myClass object2("Amy"); 
    cout << object.getName(); 
} 
system("PAUSE"); 
} 
+0

Хм, контратип http://stackoverflow.com/q/5136295/560648? Он указан прямо в панели «связанные вопросы». –

+0

Пожалуйста, найдите время, чтобы [прочитать о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask). Хороший вопрос о ошибках сборки должен содержать текстовую скопированную копию фактических ошибок, полную, полную, с возможными информационными примечаниями и никак не отредактированную. И кроме комментария в коде, указывающем, где ошибка (что вы сделали это хорошо, не все новички здесь делают это) также указывают местоположение в тексте вопроса вопроса тоже. –

+0

@Someprogrammerdude Извините, я обязательно сделаю это в следующий раз! И слишком легкость я новичок в C++ и не понимаю, что это значит. Я запутался довольно легко, но я делаю все возможное! – IVIaximumPower

ответ

0

Эти case "заявления" на самом деле являются этикетки, как goto. Они не начинают новую область. Когда условие найдено, выполнение «перескакивает» на соответствующий ярлык case и продолжается оттуда.

The language's rules insist that you cannot "jump" over initialisations, поскольку для этого последовательным и предсказуемым способом потребуется более сложная стандартная формулировка.

Поместите свои дела в самостоятельную область, чтобы «изолировать» декларации и предотвратить их «утечку» в следующий случай, что касается компилятора.

Например:

case 1: { //Practising Classes 
    CRectangle area; 
    cout << "Enter two numbers \n"; 
    cin >> area.x; 
    cin >> area.y; 
    cout << "Area is: "<< area.findArea() << endl; 
    break; 
} 

Я добавил { и }. Они не являются частью синтаксиса switch/case, но только автономные области видимости блоки, так же, как внутренние из них здесь:

int main() 
{ 
    int x = 42; 
    { 
     int x = 999; // a different x! 
    } 
} 
+0

Спасибо! Сейчас исправлено <3, я некоторое время застрял на этом. Что-то, чему я научился C++ на «SoloLearn», сказал мне это. Благодаря! – IVIaximumPower