2013-11-24 4 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

Поместите весь блок в фигурные скобки, как сказал Ханс - проблема в сфере. Лучше по-прежнему переместить его на отдельный метод, или легко закончить с помощью оператора switch из нескольких сотен строк. –

Смежные вопросы