2013-11-24 9 views
7

Gdzie jest ogromna różnica, która generuje błąd C2360, w następujących dwóch definicjach?Błąd C2360: Inicjalizacja "hdc" jest pomijana przez etykietę "case".

switch (msg) { 
    case WM_PAINT: 
     HDC hdc; 
     hdc = BeginPaint(hWnd, &ps); // No error 
     break; 
} 

i

switch (msg) { 
    case WM_PAINT: 
     HDC hdc = BeginPaint(hWnd, &ps); // Error 
     break; 
} 
+9

Jest to reguła C++. Po prostu umieść wokół niego {nawiasy klamrowe}. –

Odpowiedz

9

Pierwszym jest legalne, a drugie nie jest. Pomijanie deklaracji bez inicjalizatora jest czasami dozwolone, ale nigdy nie ma inicjatora.

Zobacz Storage allocation of local variables inside a block in c++.

+1

Czy jest lepszy sposób na zainicjowanie hdc? – Cubinator73

+1

Połóż cały blok w nawiasach klamrowych, jak powiedział Hans - problemem jest zakres. Jeszcze lepiej przenieś to na osobną metodę, lub łatwo jest skończyć z instrukcją przełączania na kilkaset linii. –