Как исправить ошибку «Перейти к инициализации пересечения меток регистра» в C++

Kak Ispravit Osibku Perejti K Inicializacii Peresecenia Metok Registra V C



Оператор switch является лучшей альтернативой длинному оператору if-else-if, поскольку он уменьшает длину кода и повышает ясность. Значение оценивается с помощью оператора переключателя и проверяется на соответствие значениям каждой метки варианта. Если совпадение найдено, код выполняется до прерывания, в противном случае он выполняет код после «по умолчанию».

Что вызывает ошибку «Переход к инициализации метки регистра» в C++

При использовании оператора переключателя в C++ можно наблюдать распространенную ошибку: «Переход к инициализации метки регистра». Эта ошибка обычно возникает из-за неправильного объявления переменной в метке случая. Вот пример программы, демонстрирующей ошибку «Перейти к инициализации пересечения меток регистра» на C++:







#include
#include
использование пространства имен std;
пустота меню_дисплей ( ) ;
int choice_menu ( ) ;
недействительный get_two_operands ( интервал & п, интервал & м ) ;
int добавить ( интервал n, интервал m ) ;
целое вычитание ( интервал n, интервал m ) ;


int главный ( )
{
выбор int;

делать
{
меню_дисплей ( ) ;
выбор = меню_выбора ( ) ;
интервал х, у;
выключатель ( выбор )
{
случай 1 :

get_two_operands ( х,у ) ;
интервал сумма = добавить ( х,у ) ;
расчет << Икс << '+' << и << '=' << сумма << конец;

перерыв ;

случай 2 :

get_two_operands ( х,у ) ;

интервал разница = вычесть ( х,у ) ;
расчет << Икс << '-' << и << '=' << разница << конец;

перерыв ;
по умолчанию:;
}

} пока ( выбор ! '=' 3 ) ;

расчет << «Программа прекращена» << конец;

возвращаться 0 ;
}


пустота меню_дисплей ( )
{
расчет << конец;
расчет << «Базовый калькулятор» << конец;
расчет << ' 1. Добавить (+) ' << конец;
расчет << «2. Вычесть (-)» << конец;
расчет << «3. Выход» << конец;

расчет << конец;
}

int get_menu_choice ( )
{
выбор int;
расчет << «Неверный выбор. Попробуйте еще раз:» ;
принимать пищу >> выбор;

пока ( ( ( выбор < 1 ) || ( выбор > 3 ) ) && ( ! cin.fail ( ) ) )
{
расчет << ': ' ;
принимать пищу >> выбор;
}
если ( cin.fail ( ) )
{
расчет << 'Ошибка ' << конец;
Выход ( 1 ) ;
}
возвращаться выбор;
}

недействительный get_two_operands ( интервал & п, интервал & м )
{
расчет << «Дайте два операнда» << конец;
расчет << 'Первый операнд: ' ;
принимать пищу >> н;
расчет << «Второй операнд:» ;
принимать пищу >> м;

}


int добавить ( интервал n, интервал m )
{
возвращаться ( п + м ) ;
}

целое вычитание ( интервал n, интервал m )
{
возвращаться ( н - м ) ;
}


Когда эта программа выполняется, она возвращает ошибку «Перейти к метке дела». Это ошибка компиляции.



Эта ошибка возникает из-за объявления переменной внутри оператора case без закрывающих скобок. Корпус — это просто метка, поэтому у него нет возможности ограничить доступность записанных под ним параметров. Когда приведенный выше код выполняется, переменные случая 1 могут быть доступны для случая 2, и они будут отображаться как неинициализированные, что приведет к ошибкам.







Как исправить ошибку «Перейти к инициализации пересечения меток регистра» в C++

Эту ошибку можно исправить, используя скобки внутри блока case, которые создадут замкнутую область, и параметры различных блоков case не будут изменяться.

Отлаженный код

Это отлаженный код вышеуказанной ошибки. Ошибка исправляется заключением данных по падежам в скобки:



#include
#include
использование пространства имен std;
пустота меню_дисплей ( ) ;
int choice_menu ( ) ;
недействительный get_two_operands ( интервал & п, интервал & м ) ;
int добавить ( интервал n, интервал m ) ;
целое вычитание ( интервал n, интервал m ) ;


int главный ( )
{
выбор int;

делать
{
меню_дисплей ( ) ;
выбор = меню_выбора ( ) ;
интервал х, у;
выключатель ( выбор )
{
случай 1 :
{
get_two_operands ( х,у ) ;
интервал сумма = добавить ( х,у ) ;
расчет << Икс << '+' << и << '=' << сумма << конец;
}
перерыв ;
случай 2 :
{
get_two_operands ( х, у ) ;
интервал разница = вычесть ( х,у ) ;
расчет << Икс << '-' << и << '=' << разница << конец;
}
перерыв ;
по умолчанию:;
}

} пока ( выбор ! '=' 3 ) ;

расчет << «Программа прекращена» << конец;

возвращаться 0 ;
}


пустота меню_дисплей ( )
{
расчет << конец;
расчет << «Базовый калькулятор» << конец;
расчет << ' 1. Добавить (+) ' << конец;
расчет << «2. Вычесть (-)» << конец;
расчет << «3. Выход» << конец;
расчет << конец;
}

int choice_menu ( )
{
выбор int;
расчет << «Выберите операцию:» ;
принимать пищу >> выбор;

пока ( ( ( выбор < 1 ) || ( выбор > 3 ) ) && ( ! cin.fail ( ) ) )
{
расчет << «Неверный выбор. Попробуйте еще раз:» ;
принимать пищу >> выбор;
}
если ( cin.fail ( ) )
{
расчет << 'Ошибка' << конец;
Выход ( 1 ) ;
}
возвращаться выбор;
}

недействительный get_two_operands ( интервал & п, интервал & м )
{
расчет << «Дайте два операнда» << конец;
расчет << 'Первый операнд: ' ;
принимать пищу >> н;
расчет << «Второй операнд:» ;
принимать пищу >> м;

}


int добавить ( интервал n, интервал m )
{
возвращаться ( п + м ) ;
}

целое вычитание ( интервал n, интервал m )
{
возвращаться ( н - м ) ;
}


После использования закрывающих скобок в регистровых блоках кода ошибка была исправлена ​​и выведен вывод:

Заключение

Оператор switch является лучшей альтернативой длинному оператору if-else-if, поскольку он уменьшает длину кода и повышает ясность. При использовании оператора switch в C++ распространенной ошибкой компиляции, которую можно наблюдать, является «Переход к инициализации пересечения метки регистра». Эта ошибка обычно возникает из-за неправильного объявления переменной в метке случая. Это можно исправить, используя заключающие скобки данные под блоками case.