2017-02-17 37 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のように、実際のラベルです。彼らは新しい範囲を開始しません。条件が見つかると、実行は関連するケースラベルに「ジャンプ」し、そこから続行されます。

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私はしばらくの間これに固執していました。 "SoloLearn"でC++を勉強していたことが私にこれを教えてくれました。ありがとう! – IVIaximumPower

関連する問題