ข้อผิดพลาด C ++: ไม่ทำงานมากเกินไป '=':

Khx Phid Phlad C Mi Thangan Mak Kein Pi



ข้อผิดพลาดคือการดำเนินการที่อาจเป็นผลมาจากการทำงานที่ผิดปกติของรหัสใดๆ ไม่สามารถตรวจพบข้อผิดพลาดในขณะที่เขียนจนกว่าเราจะดำเนินการโค้ดหรือคอมไพล์ ข้อผิดพลาดบางอย่างทำให้รหัสไม่สามารถดำเนินการได้จนกว่าจะถูกลบออก วันนี้เราจะพูดถึงข้อผิดพลาดที่เกิดขึ้นเมื่อคอมไพล์โปรแกรมด้วย นั่นคือ “ข้อผิดพลาด: ไม่ตรงกับ 'โอเปอเรเตอร์='” ข้อผิดพลาดนี้อาจเกิดจากสาเหตุต่างๆ เช่น: หากเราผ่านตัวชี้ที่ต้องส่งผ่านสตริง การแก้ไขตัวแปรคงที่ ฯลฯ ไม่ใช่เรื่องยากที่จะลบข้อผิดพลาด 'ไม่มีการทำงานมากเกินไป' แต่งานหลักคือการ เข้าใจข้อผิดพลาดเพราะมันแสดงข้อผิดพลาดโดยไม่มีคำอธิบายของข้อผิดพลาด

ไวยากรณ์

ไม่มีไวยากรณ์ที่กำหนดไว้ล่วงหน้าดังกล่าวสำหรับข้อผิดพลาดนี้ เนื่องจากข้อผิดพลาดนี้ไม่ได้เป็นส่วนหนึ่งของโค้ดหรือเอาต์พุต เป็นเพียงความกำกวมที่อาจเกิดจากโค้ดที่ไม่ถูกต้อง ดังที่เราเห็นด้านล่างเป็นตัวอย่างของข้อผิดพลาดที่อาจเกิดขึ้น







ข้อผิดพลาด : ไม่มีการแข่งขัน สำหรับ 'ผู้ประกอบการ =

ตัวอย่าง # 01:

ให้เรามีความคิดเกี่ยวกับข้อผิดพลาดนี้และวิธีการแก้ไข เพื่อให้เข้าใจได้ดีขึ้น เราจะทำตัวอย่างที่เราจะส่งชื่อโดยใช้ออบเจกต์ไปยังฟังก์ชัน และจากนั้นมันจะแสดงออกมา ก่อนอื่นเราจะรวมไฟล์ส่วนหัว iostream หลังจากนั้นเราจะประกาศคลาสชื่อ “my_object” ภายในนั้น เราได้ประกาศตัวแปรสตริงสองตัวชื่อ “F_name และ “L_name” โดย “F_name” ระบุชื่อของบุคคล โดยที่ “L_name” ระบุนามสกุลของบุคคลนั้น



ต่อไป เราได้ประกาศตัวสร้างสาธารณะชื่อ “my_object()” ซึ่งเราได้กำหนดค่า Null ให้กับทั้งตัวแปร “F_name” และ “L_name” หลังจากนั้น เราประกาศฟังก์ชันอื่นที่เราได้ส่งผ่านตัวแปรประเภทสตริง “fn” และ “ln” ข้างในนั้นเราเรียกเมธอด name_set() จากนั้น เราประกาศฟังก์ชันสมาชิกสองฟังก์ชัน “show()” และ “name_set()” เมื่อเรียกใช้ฟังก์ชัน “show() จะแสดงชื่อและนามสกุลพร้อมกัน ในขณะที่ในฟังก์ชันสมาชิก “set_name()” เราส่งผ่านตัวแปรสตริงสองตัวที่เป็นประเภทสตริง “fn” และ “ln” ซึ่งเราได้ส่งต่อไปยังตัวสร้างที่สองด้วย



ตอนนี้ ใช้โอเปอเรเตอร์การกำหนดสำเนาของคลาส my_object เราใช้พารามิเตอร์ประเภท “my_object” หนึ่งพารามิเตอร์ คอมไพเลอร์ประกาศเสมอว่าเป็นสมาชิกสาธารณะแบบอินไลน์ของคลาสใดๆ ภายในสมาชิกนี้ เราได้กำหนด src.F_name ให้กับ “F_name” และ src.L_name ให้กับ “L_name” ซึ่งเราได้เก็บสำเนาของ “F_name” และ “L_name” ไว้ สิ่งนี้จะถูกส่งต่อไปยังสมาชิกของคลาส my_object ตอนนี้ เราได้ประกาศอ็อบเจกต์ของคลาส my_cobject ชื่อ “name1” ซึ่งเราได้ส่งสตริง 2 สาย “Anna” และ “smith” เป็นอาร์กิวเมนต์ สิ่งนี้จะเรียกตัวสร้างและแสดงชื่อพร้อมกับนามสกุล





หลังจากนั้น เราสร้างอ็อบเจกต์ “name2” ขึ้นมาอีกอัน จากนั้นจึงกำหนดชื่อให้กับอ็อบเจกต์นั้นแยกกัน หลังจากส่งค่าไปยังคอนสตรัคเตอร์ของออบเจกต์ทั้งสองแล้ว เราเรียกเมธอด show() ซึ่งจะแสดงชื่อของออบเจกต์ทั้งสองเป็น 'nam1' และ 'name2' ในตอนท้ายของโค้ด เราคืนค่า Null และดำเนินการโค้ดของเรา

รวม
ระดับ my_object {
ส่วนตัว :
มาตรฐาน :: สตริง F_name, L_name ;
สาธารณะ :
my_object ( ) { F_ชื่อ = ' ' ; L_name = ' ' ; }
my_object ( มาตรฐาน :: สตริง fn, มาตรฐาน :: สตริง ) {
name_set ( ฟน, ลน ) ;
}
เป็นโมฆะ แสดง ( ) { มาตรฐาน :: ศาล << 'ชื่อคือ' << F_ชื่อ << ' ' << L_name << '. \n ' ; }
เป็นโมฆะ name_set ( มาตรฐาน :: สตริง fn, มาตรฐาน :: สตริง ) { F_ชื่อ = ; L_name = ; }
my_object & ผู้ประกอบการ = ( คอสต์ my_object & src ) {
F_ชื่อ = src. F_ชื่อ ;
L_name = src. L_name ;
กลับ * นี้ ;
}

} ;
นานาชาติ หลัก ( นานาชาติ อาร์จีซี, ถ่าน ** หาเรื่อง ) {
ชื่อ my_object1 ( 'แอนนา' , 'สมิธ' ) ;
ชื่อ my_object2 ;
ชื่อ2 = ( 'แอนนา' , 'สมิธ' ) ;
ชื่อ1. แสดง ( ) ;
ชื่อ2. แสดง ( ) ;
กลับ 0 ;
}

หลังจากดำเนินการโค้ดของเรา เรามีข้อผิดพลาดนี้ซึ่งแสดงว่าเราเขียนโค้ดผิดในบรรทัดที่ 24 ซึ่งระบุประเภทของข้อผิดพลาดที่พบ “ข้อผิดพลาด: ไม่ตรงกับ ‘ตัวดำเนินการ=’” ตอนนี้ เราจะพยายามแก้ไขข้อผิดพลาดนี้



สำหรับการแก้ไขข้อผิดพลาดนี้ เรามีหลายวิธีในการส่งค่าไปยังตัวสร้างของคลาสใดๆ ในวิธีแรก เราจะกำหนดออบเจกต์ “name1” ให้กับ “name2” เนื่องจากเราได้ส่งค่าที่เหมือนกันไปยังออบเจ็กต์ทั้งสองแล้ว จึงไม่จำเป็นต้องแยกส่ง ตอนนี้เราดำเนินการรหัส

นานาชาติ หลัก ( นานาชาติ อาร์จีซี, ถ่าน ** หาเรื่อง ) {

ชื่อ my_object1 ( 'แอนนา' , 'สมิธ' ) ;
ชื่อ my_object2 ;
ชื่อ2 = ชื่อ1 ;
ชื่อ1. แสดง ( ) ;
ชื่อ2. แสดง ( ) ;

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

วิธีที่สองในการแก้ไขข้อผิดพลาดนี้คือเมื่อเราต้องส่งค่าที่แตกต่างกันไปยังวัตถุทั้งสอง เราจะใช้ชื่อคลาสพร้อมกับค่าที่จะส่งไปยังตัวสร้างเป็นอาร์กิวเมนต์ เราส่งชื่อแรกว่า 'jhone' และชื่อที่สอง 'smith' จากนั้นเราดำเนินการรหัส

นานาชาติ หลัก ( นานาชาติ อาร์จีซี, ถ่าน ** หาเรื่อง ) {

ชื่อ my_object1 ( 'แอนนา' , 'สมิธ' ) ;
ชื่อ my_object2 ;
ชื่อ2 = my_object ( 'จอห์นสมิ ธ' ) ;

ชื่อ1. แสดง ( ) ;
ชื่อ2. แสดง ( ) ;

หลังจากรันโค้ดที่เพิ่มด้านบนแล้ว เราก็จะได้ผลลัพธ์ดังที่แสดงด้านล่าง สำหรับวัตถุ “name1” จะแสดงชื่อ “Anna smith” และสำหรับวัตถุที่สอง “name2” จะแสดงชื่อ “Jhone Smith” แต่คราวนี้รหัสของเราทำงานได้อย่างถูกต้องโดยไม่มีข้อผิดพลาดใดๆ

ตอนนี้เราจะลองวิธีอื่นในการรันโค้ดของเราให้สำเร็จ ในกรณีข้างต้น เราพยายามกำหนดค่าให้กับวัตถุโดยใช้ตัวดำเนินการกำหนด แต่คราวนี้เราจะส่งค่าในช่วงเวลาของการประกาศวัตถุ ดังที่เราเห็นในตัวอย่างด้านล่าง ในเวลาที่ประกาศออบเจ็กต์ 'name1' เราส่งค่าเป็นอาร์กิวเมนต์ไปยังออบเจ็กต์โดยทำซ้ำขั้นตอนเดียวกันสำหรับ 'name2' ตอนนี้เรารันโค้ดอีกครั้ง

นานาชาติ หลัก ( นานาชาติ อาร์จีซี, ถ่าน ** หาเรื่อง ) {
ชื่อ my_object1 ( 'แอนนา' , 'สมิธ' ) ;
ชื่อ my_object2 ( 'จอห์นสมิ ธ' ) ;
ชื่อ1. แสดง ( ) ;
ชื่อ2. แสดง ( ) ;

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

บทสรุป

เราได้กล่าวถึงข้อผิดพลาดที่เราอาจเผชิญขณะทำงานกับฟังก์ชันที่เข้าถึงได้จากชั้นเรียนโดยสังเขป เรายังได้ศึกษาสาเหตุและวิธีการแก้ไขข้อผิดพลาด “ไม่ทำงานมากเกินไป” ข้อผิดพลาดนี้ส่วนใหญ่เข้าใจยากสำหรับโปรแกรมเมอร์มือใหม่ ดังนั้นเราจึงพยายามให้พวกเขาแก้ไขข้อผิดพลาดนี้โดยการใช้ตัวอย่างและคำอธิบาย