dynamiczny obiekt, problem w switch'u

0
 #include <iostream>
using namespace std;

class A
{
protected:
    int AA;
    int BB;
public:
    A (int a, int b)
    {
        AA= a; BB= b;
    }
    A()
    {
       
    }

};

class B : public A
{
private:
    int CC;
public:
    B (int a, int b)
    {
        AA= a; BB= b;
    }
    B ()
    {

    }
    void w ()
    {
        cout << AA << endl
             << BB << endl
             << CC << endl;
    }

};

int main ()
{
    int w;

    cin >> w;
    switch (w)
    {
        case 1:
            A * wsk = new A(2,3);
            delete wsk;

        break;

        case 2:

        break;
    }

    return 0;
}

E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp||In function 'int main()':|
E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp|58|error: jump to case label|
E:\CodeBlocks\PROJEKTY\SZKOLA_OB\forp.cpp|53|error: crosses initialization of 'A* wsk'|
||=== Build finished: 2 errors, 0 warnings ===|

co oznacz ten błąd? nie można w switchu deklarować dynamicznych obiektów? czy jak?

0

W takim wypadku case musi być objęty klamrą.

case 1: {
  // kod
  break;
}

Zmienne wewnątrz switch powinny być dostępne w całym bloku. Jeżeli jednak stworzyłeś zmienna w pierwszym case a wszedł byś od razu w drugi, to dla tej zmiennej nie wywołał by się konstruktor, a sytuacja taka w C++ jest niedopuszczalna. Objęcie klamrą powoduje, że nie ma takiego niebezpieczeństwa.

0

daj ten fragment z new i delete w klamry i będzie działać.

edit: @up 14s :D

0

a można wiedzieć dlaczego tak, bo konstrukcja switcha, nie wymaga klamer przy case.
dzięki za pomoc :)

0

albo:

case 1:
    delete new A(2,3);
    break;

1 użytkowników online, w tym zalogowanych: 0, gości: 1