วิธีแก้ไขข้อผิดพลาด 'Jump to Case Label Crosses Initialization' ใน C ++

Withi Kaekhi Khx Phid Phlad Jump To Case Label Crosses Initialization Ni C



คำสั่ง switch เป็นทางเลือกที่ดีที่สุดสำหรับคำสั่ง if-else-if แบบยาว เนื่องจากจะลดความยาวของโค้ดและทำให้มีความชัดเจนมากขึ้น ค่าได้รับการประเมินโดยใช้คำสั่ง switch และทดสอบกับค่าของเลเบลแต่ละเคส หากพบการจับคู่ โค้ดจะดำเนินการก่อนตัวแบ่ง มิฉะนั้น จะดำเนินการโค้ดหลัง 'ค่าเริ่มต้น'

อะไรทำให้เกิดข้อผิดพลาด 'Jump to Case Label Crosses Initialization' ใน C ++

ในขณะที่ใช้คำสั่ง switch ใน C ++ ข้อผิดพลาดทั่วไปที่อาจสังเกตได้คือ 'Jump to Case Label Crosses Initialization' ข้อผิดพลาดนี้มักจะปรากฏขึ้นเนื่องจากการประกาศตัวแปรภายในเลเบลเคสไม่ถูกต้อง นี่คือตัวอย่างโปรแกรมที่แสดงให้เห็นถึงข้อผิดพลาด 'Jump to Case Label Crosses Initialization' ใน C ++:







#รวม
#รวม
ใช้เนมสเปซมาตรฐาน;
โมฆะ menu_display ( ) ;
int Choice_เมนู ( ) ;
โมฆะ get_two_operands ( ภายใน & เอ็น, อินท์ & ) ;
int เพิ่ม ( int n, int ม ) ;
ลบ int ( int n, int ม ) ;


int หลัก ( )
{
การเลือก int;

ทำ
{
เมนู_จอแสดงผล ( ) ;
การเลือก = choice_menu ( ) ;
อินท์ x, y;
สวิตช์ ( การเลือก )
{
กรณี 1 : :

get_two_operands ( เอ็กซ์, ย ) ;
ภายใน ผลรวม = เพิ่ม ( เอ็กซ์, ย ) ;
ศาล << x << '+' << และ << ' = ' << ผลรวม << จบ;

หยุดพัก ;

กรณี 2 : :

get_two_operands ( เอ็กซ์, ย ) ;

ภายใน ความแตกต่าง = ลบ ( เอ็กซ์, ย ) ;
ศาล << x << '-' << และ << ' = ' << ความแตกต่าง << จบ;

หยุดพัก ;
ค่าเริ่มต้น:;
}

} ในขณะที่ ( การเลือก ! = 3 ) ;

ศาล << “โปรแกรมถูกยกเลิก” << จบ;

กลับ 0 ;
}


โมฆะ menu_display ( )
{
ศาล << จบ;
ศาล << 'เครื่องคิดเลขพื้นฐาน' << จบ;
ศาล << ' 1. เพิ่ม (+) ' << จบ;
ศาล << ' 2. ลบ (-) ' << จบ;
ศาล << ' 3. ออก' << จบ;

ศาล << จบ;
}

int get_menu_choice ( )
{
ทางเลือกอินท์;
ศาล << 'ตัวเลือกไม่ถูกต้อง ลองอีกครั้ง:' ;
การกิน >> การคัดเลือก;

ในขณะที่ ( ( ( การเลือก < 1 ) || ( การเลือก > 3 ) ) && ( ! cin.ล้มเหลว ( ) ) )
{
ศาล << ':' ;
การกิน >> การคัดเลือก;
}
ถ้า ( cin.ล้มเหลว ( ) )
{
ศาล << 'ข้อผิดพลาด ' << จบ;
ออก ( 1 ) ;
}
กลับ การคัดเลือก;
}

โมฆะ get_two_operands ( ภายใน & เอ็น, อินท์ & )
{
ศาล << 'ให้ตัวถูกดำเนินการสองตัว' << จบ;
ศาล << 'ตัวดำเนินการตัวแรก:' ;
การกิน >> ไม่มี;
ศาล << 'ตัวดำเนินการที่สอง:' ;
การกิน >> ม.;

}


int เพิ่ม ( int n, int ม )
{
กลับ ( เอ็น + ม ) ;
}

ลบ int ( int n, int ม )
{
กลับ ( น - ม ) ;
}


เมื่อโปรแกรมนี้ถูกดำเนินการ มันจะส่งกลับข้อผิดพลาด 'Jump to Case Label' นี่เป็นข้อผิดพลาดในการรวบรวม



ข้อผิดพลาดนี้ปรากฏขึ้นเนื่องจากมีการประกาศตัวแปรภายในคำสั่ง case โดยไม่มีวงเล็บปิด เคสนี้เป็นเพียงป้ายกำกับ ดังนั้นจึงไม่สามารถจำกัดความพร้อมใช้งานของพารามิเตอร์ที่เขียนอยู่ข้างใต้ได้ เมื่อโค้ดข้างต้นถูกดำเนินการ ตัวแปรของกรณีที่ 1 จะสามารถเข้าถึงได้โดยกรณีที่ 2 และจะปรากฏว่าไม่ได้กำหนดค่าเริ่มต้นซึ่งนำไปสู่ข้อผิดพลาด







วิธีแก้ไขข้อผิดพลาด 'Jump to Case Label Crosses Initialization' ใน C ++

ข้อผิดพลาดนี้สามารถแก้ไขได้โดยใช้วงเล็บปีกกาภายในบล็อกเคส ซึ่งจะสร้างขอบเขตแบบปิด และพารามิเตอร์ของบล็อกเคสต่างๆ จะไม่ถูกจัดการ

รหัสดีบั๊ก

นี่คือรหัสที่แก้ไขข้อบกพร่องสำหรับข้อผิดพลาดข้างต้น ข้อผิดพลาดได้รับการแก้ไขโดยการใส่ข้อมูลไว้ใต้ตัวพิมพ์ภายในวงเล็บ:



#รวม
#รวม
ใช้เนมสเปซมาตรฐาน;
โมฆะ menu_display ( ) ;
int Choice_เมนู ( ) ;
โมฆะ get_two_operands ( ภายใน & เอ็น, อินท์ & ) ;
int เพิ่ม ( int n, int ม ) ;
ลบ int ( int n, int ม ) ;


int หลัก ( )
{
การเลือก int;

ทำ
{
เมนู_จอแสดงผล ( ) ;
การเลือก = choice_menu ( ) ;
อินท์ x, y;
สวิตช์ ( การเลือก )
{
กรณี 1 : :
{
get_two_operands ( เอ็กซ์, ย ) ;
ภายใน ผลรวม = เพิ่ม ( เอ็กซ์, ย ) ;
ศาล << x << '+' << และ << ' = ' << ผลรวม << จบ;
}
หยุดพัก ;
กรณี 2 : :
{
get_two_operands ( เอ็กซ์, ย ) ;
ภายใน ความแตกต่าง = ลบ ( เอ็กซ์, ย ) ;
ศาล << x << '-' << และ << ' = ' << ความแตกต่าง << จบ;
}
หยุดพัก ;
ค่าเริ่มต้น:;
}

} ในขณะที่ ( การเลือก ! = 3 ) ;

ศาล << “โปรแกรมถูกยกเลิก” << จบ;

กลับ 0 ;
}


โมฆะ menu_display ( )
{
ศาล << จบ;
ศาล << 'เครื่องคิดเลขพื้นฐาน' << จบ;
ศาล << ' 1. เพิ่ม (+) ' << จบ;
ศาล << ' 2. ลบ (-) ' << จบ;
ศาล << ' 3. ออก' << จบ;
ศาล << จบ;
}

int Choice_เมนู ( )
{
การเลือก int;
ศาล << 'เลือกการดำเนินการ: ' ;
การกิน >> การคัดเลือก;

ในขณะที่ ( ( ( การเลือก < 1 ) || ( การเลือก > 3 ) ) && ( ! cin.ล้มเหลว ( ) ) )
{
ศาล << 'ตัวเลือกไม่ถูกต้อง ลองอีกครั้ง:' ;
การกิน >> การคัดเลือก;
}
ถ้า ( cin.ล้มเหลว ( ) )
{
ศาล << 'ข้อผิดพลาด' << จบ;
ออก ( 1 ) ;
}
กลับ การคัดเลือก;
}

โมฆะ get_two_operands ( ภายใน & เอ็น, อินท์ & )
{
ศาล << 'ให้ตัวถูกดำเนินการสองตัว' << จบ;
ศาล << 'ตัวดำเนินการตัวแรก:' ;
การกิน >> ไม่มี;
ศาล << 'ตัวดำเนินการที่สอง:' ;
การกิน >> ม.;

}


int เพิ่ม ( int n, int ม )
{
กลับ ( เอ็น + ม ) ;
}

ลบ int ( int n, int ม )
{
กลับ ( น - ม ) ;
}


หลังจากใช้วงเล็บปิดในบล็อกเคสของโค้ด ข้อผิดพลาดได้รับการแก้ไขแล้วและเอาต์พุตจะแสดง:

บทสรุป

คำสั่ง switch เป็นทางเลือกที่ดีที่สุดสำหรับคำสั่ง if-else-if แบบยาว เนื่องจากจะลดความยาวของโค้ดและทำให้มีความชัดเจนมากขึ้น ในขณะที่ใช้คำสั่ง switch ใน C ++ ข้อผิดพลาดในการคอมไพล์ทั่วไปที่อาจสังเกตได้คือ 'Jump to Case Label Crosses Initialization' ข้อผิดพลาดนี้มักจะปรากฏขึ้นเนื่องจากการประกาศตัวแปรภายในเลเบลเคสไม่ถูกต้อง ซึ่งสามารถแก้ไขได้โดยใช้วงเล็บปิดล้อมรอบข้อมูลภายใต้บล็อคตัวพิมพ์