После повторного отступа в коде и изменения нескольких вещей, чтобы он компилировался в моей системе, g ++ компилирует его без предупреждений.
Мое лучшее предположение заключается в том, что он как-то связан со старыми правилами для области видимости объекта, объявленного в цикле for (раньше он работал до конца включающей области; в современном C ++ он ограничен самим циклом ), но я не совсем уверен.
Чтобы помочь нам понять это, пожалуйста, сделайте отступ в коде правильно и покажите нам точное сообщение об ошибке, включая номер строки. Если в сообщении об ошибке указано «строка 42: ...», добавьте комментарий в свой источник, например // this is line 42
.
РЕДАКТИРОВАТЬ: Да, я думаю, что это проблема. В современном C ++ ваш код в порядке, потому что переменные цикла ограничены самими циклами. Очевидно, Turbo реализует очень старую версию языка, поэтому ваша переменная a
, например, видна до самого конца оператора switch
. Заключение каждой петли for
в фигурные скобки должно исключать предупреждение:
{
for (int a = 0; a <= 1; a++) {
for (int b = 0; b <= 1; b++) {
mat3[a][b] = mat1[a][b] + mat2[a][b];
}
}
}
EDIT2: Или еще лучше, прекратите использовать Turbo C ++ и получите современный компилятор.
EDIT3: И причина, по которой компилятор предупреждает об этом, заключается в том, что даже если кажется, что i
всегда инициализируется перед использованием, вы можете в принципе обратиться к i
в разделе case 2:
, минуя инициализацию. (Опять же, это относится только к старым правилам.)
Более понятный способ обойти это, вероятно, заключить каждую секцию case
в фигурные скобки:
switch (choice) {
case 1: {
...
break;
}
case 2: {
...
break;
}
}
(или, опять же, получите современный компилятор, если у вас нет действительно веской причины придерживаться Turbo C ++).