2013-11-24 25 views
7

Sự khác biệt lớn ở đâu, tạo lỗi C2360, theo hai định nghĩa sau đây?Lỗi C2360: Khởi tạo 'hdc' bị bỏ qua bởi nhãn '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

Đó là quy tắc C++. Đơn giản chỉ cần đặt {dấu ngoặc ôm} xung quanh nó. –

Trả lời

9

Đầu tiên là quy phạm pháp luật và lần thứ hai không phải là. Bỏ qua một tuyên bố mà không có một bộ khởi tạo đôi khi được phép, nhưng không bao giờ có một bộ khởi tạo.

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

+1

Có cách nào tốt hơn để khởi tạo hdc? – Cubinator73

+1

Đặt toàn bộ khối trong niềng răng như Hans nói - vấn đề là phạm vi. Tốt hơn là vẫn di chuyển nó ra một phương pháp riêng biệt, hoặc thật dễ dàng để kết thúc với một tuyên bố chuyển đổi vài trăm dòng. –

Các vấn đề liên quan