Fehler C2360: Initialisierung von 'hdc' wird übersprungen durch 'case' - label
Wo ist der große Unterschied, die generiert den Fehler C2360, die in den folgenden zwei Definitionen?
switch (msg) {
case WM_PAINT:
HDC hdc;
hdc = BeginPaint(hWnd, &ps); //No error
break;
}
und
switch (msg) {
case WM_PAINT:
HDC hdc = BeginPaint(hWnd, &ps); //Error
break;
}
- Es ist eine C++ - Regel. Einfach ausgedrückt: { geschweifte Klammern } um ihn herum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste legal und das zweite nicht. Das überspringen einer Deklaration ohne Initialisierung ist manchmal erlaubt, aber nie eine mit einer Initialisierung.
Sehen Storage-Zuweisung von lokalen Variablen innerhalb eines Blocks in c++.
Wenn eine variable deklariert wird, in einem Fall, der nächste Fall ist technisch gesehen immer noch im gleichen Bereich, so konnten Sie darauf verweisen, aber wenn Sie trifft, der Fall, ohne dass diese zunächst würden Sie am Ende den Aufruf eines uninitialised variables. Dieser Fehler verhindert, dass.
Alles, was Sie tun müssen, ist entweder definieren Sie vor der switch-Anweisung oder verwenden Sie geschweifte Klammern { } um sicherzustellen, dass es geht out of scope vor dem beenden von einem bestimmten Fall.
switch (msg) {
case WM_PAINT:
{
HDC hdc;
hdc = BeginPaint(hWnd, &ps);
}
break;
}