2013-11-24 26 views
7

在以下兩個定義中,產生錯誤C2360的巨大差異在哪裏?錯誤C2360:'hdc'的初始化由'case'標籤跳過

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

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

這是一個C++規則。只需在它周圍放置{大括號}即可。 –

回答

9

首先是合法的,第二個是不是。跳過沒有初始化器的聲明有時是允許的,但從來沒有初始化器。

請參閱Storage allocation of local variables inside a block in c++

+1

有沒有更好的方法來初始化hdc? – Cubinator73

+1

漢斯說過把整個塊放在大括號中 - 問題在於範圍。更好的辦法是將其移出一個單獨的方法,否則很容易以數百行開關語句結束。 –