ในภาษา C++ ตัวสร้างคือฟังก์ชันเฉพาะของสมาชิกที่ใช้ชื่อตามชื่อของคลาสที่เกี่ยวข้อง ใช้สำหรับการเริ่มต้นค่าที่เป็นประโยชน์บางอย่างสำหรับสมาชิกของออบเจ็กต์ หากผู้ใช้ไม่ได้กำหนดคอนสตรัคเตอร์ คอมไพเลอร์ C++ จะสร้างคอนสตรัคเตอร์เริ่มต้นและคาดว่าจะไม่มีพารามิเตอร์และเนื้อหาว่าง อย่างไรก็ตาม เมื่อมี Constructor ที่ผู้ใช้กำหนด จำเป็นต้องประกาศเนื้อหาและพารามิเตอร์ของมัน
อะไรทำให้เกิดข้อผิดพลาด“ ไม่มีตัวสร้างการจับคู่สำหรับการเริ่มต้น” ใน C ++
เมื่อจัดการกับคอนสตรัคเตอร์ใน C ++ ข้อผิดพลาด 'No Matching Constructor for Initialization of' มักเกิดขึ้นเนื่องจากเมื่อคอนสตรัคเตอร์ถูกเรียกว่าคอนสตรัคเตอร์เริ่มต้นโดยคอมไพเลอร์ไม่ได้ถูกสร้างขึ้น ดังนั้นคุณต้องประกาศพารามิเตอร์และเนื้อหาของคอนสตรัคเตอร์ด้วยตัวเอง การไม่ประกาศพารามิเตอร์ที่เหมาะสมจะส่งผลให้เกิดข้อผิดพลาดของคอนสตรัคเตอร์ประเภทนี้
สร้างไฟล์ข้อความธรรมดา วางโค้ดของฟังก์ชัน Square() ลงไป และบันทึกด้วยนามสกุล .h ตอนนี้วางไฟล์นี้ลงในโฟลเดอร์รวมของโฟลเดอร์ถังขยะของคอมไพเลอร์ CPP ตอนนี้เมื่อเรียกไฟล์ส่วนหัวนี้ใน main.cpp คอมไพเลอร์จะอ่านไฟล์นี้
ไฟล์ส่วนหัว Square.h
#ifndef SQUARE_H#กำหนด SQUARE_H
ระดับ สี่เหลี่ยม {
ส่วนตัว : :
สองเท่า ความยาว ;
สองเท่า ความกว้าง ;
สาธารณะ : :
สี่เหลี่ยม ( สองเท่า , สองเท่า ) ;
สองเท่า รับความยาว ( ) ค่าคงที่ ;
สองเท่า รับความกว้าง ( ) ค่าคงที่ ;
} ;
สี่เหลี่ยม :: สี่เหลี่ยม ( สองเท่า ลิตร สองเท่า ใน ) {
ความยาว = ล ;
ความกว้าง = ใน ;
}
สองเท่า สี่เหลี่ยม :: รับความกว้าง ( ) ค่าคงที่ { กลับ ความกว้าง ; }
สองเท่า สี่เหลี่ยม :: รับความยาว ( ) ค่าคงที่ { กลับ ความยาว ; }
#เอ็นดิฟ
ไฟล์ส่วนหัว main.cpp
#รวม#รวม 'square.h'
โดยใช้ เนมสเปซ มาตรฐาน ;
ภายใน หลัก ( )
{
กล่องสี่เหลี่ยม1 ( 10.0 , 10.0 ) ;
กล่องสี่เหลี่ยม2 ;
ศาล << ' ความกว้างและความยาวของกล่อง 1: ' << กล่อง1. รับความกว้าง ( ) << , ' << กล่อง1. รับความยาว ( ) << สิ้นสุด ;
ศาล << ' ความกว้างและความยาวของกล่อง 2: ' << กล่อง2. รับความกว้าง ( ) << , ' << กล่อง2. รับความยาว ( ) << สิ้นสุด ;
กล่อง2 = กล่อง1 ;
ศาล << ' เมื่อ Square Box 1 เท่ากับ Square Box 2 ' << สิ้นสุด ;
ศาล << ' ความกว้างและความยาวของกล่อง 1: ' << กล่อง1. รับความกว้าง ( ) << , ' << กล่อง1. รับความยาว ( ) << สิ้นสุด ;
ศาล << ' ความกว้างและความยาวของกล่อง 2: ' << กล่อง2. รับความกว้าง ( ) << , ' << กล่อง2. รับความยาว ( ) << สิ้นสุด ;
กลับ 0 ;
}
ในโปรแกรมนี้ ผู้ใช้ป้อนความยาวและความกว้างของกล่องสี่เหลี่ยมสองกล่อง จากนั้นเทียบกล่องทั้งสองและส่งกลับความยาวและความกว้าง:
คอมไพเลอร์ส่งคืนข้อผิดพลาดในบรรทัดที่ 14 เนื่องจากผู้รับเหมาคาดว่ามีอาร์กิวเมนต์สองตัวในขณะที่ไม่มีอาร์กิวเมนต์ให้ไว้:
ในบรรทัดที่ 8 คอมไพลเลอร์ส่งคืนข้อผิดพลาดในตัวสร้างเนื่องจากไม่ได้ระบุอาร์กิวเมนต์ในขณะที่ต้องมีอาร์กิวเมนต์ที่กำหนดไว้
วิธีแก้ไขข้อผิดพลาด 'ไม่มีตัวสร้างที่ตรงกันสำหรับการเริ่มต้น' ใน C ++
คอมไพเลอร์แสดงข้อผิดพลาดในบรรทัดที่ 8 ของโค้ด main.cpp เนื่องจากพยายามเรียกใช้ตัวสร้างเริ่มต้นของ Square คอมไพเลอร์ไม่สามารถสร้างคอนสตรัคเตอร์เริ่มต้นได้ เนื่องจากมีคอนสตรัคเตอร์ที่ผู้ใช้กำหนดอยู่แล้วซึ่งรับอาร์กิวเมนต์สองตัว ดังนั้น ให้ระบุพารามิเตอร์เป็น:
กล่องสี่เหลี่ยม2 ( 0 , 10 ) ;
คอมไพเลอร์จะสร้างคอนสตรัคเตอร์เริ่มต้นเฉพาะในกรณีที่ไม่มีคอนสตรัคเตอร์ที่ผู้ใช้กำหนด ดังนั้นในกรณีนี้ เมื่อมีการกำหนดคอนสตรัคเตอร์ ผู้ใช้จะต้องระบุคอนสตรัคเตอร์เริ่มต้น ดังนั้น เพื่อจุดประสงค์นี้ ให้จัดเตรียมอาร์กิวเมนต์เริ่มต้นในตัวสร้างอาร์กิวเมนต์สองตัวในไฟล์ Square.h ด้วยเช่นกัน สิ่งนี้จะไม่ทำให้ข้อมูลไม่ได้รับการกำหนดค่าเริ่มต้น
สี่เหลี่ยม :: สี่เหลี่ยม ( สองเท่า ล = 0 , สองเท่า ใน = 0 )ข้อผิดพลาดของตัวสร้างสามารถแก้ไขได้โดยการเรียกและประกาศตัวสร้างและพารามิเตอร์อย่างถูกต้อง รหัสใน main.cpp และ Square.h มีการเปลี่ยนแปลงตามคำแนะนำที่ให้ไว้ข้างต้น และข้อผิดพลาดของคอนสตรัคเตอร์ที่ไม่ตรงกันได้รับการแก้ไขแล้ว นี่คือรหัสที่อัปเดตสำหรับไฟล์ส่วนหัว:
นี่คือรหัสที่อัปเดตสำหรับไฟล์หลัก:
รหัสข้างต้นหลังจากการดีบักข้อผิดพลาดส่งคืนผลลัพธ์ต่อไปนี้:
ผู้ใช้ระบุความกว้างและความยาวของกล่องสี่เหลี่ยมสองกล่อง และพารามิเตอร์จะถูกส่งกลับ หลังจากนั้นจะใช้เงื่อนไขเพื่อทำให้ทั้งสองกล่องเท่ากัน จากนั้นค่าความยาวและความกว้างที่สอดคล้องกันใหม่จะถูกส่งกลับ
บทสรุป
ในภาษา C++ ตัวสร้างคือฟังก์ชันเฉพาะของสมาชิกที่ใช้ชื่อตามชื่อของคลาสที่เกี่ยวข้อง ใช้สำหรับการเริ่มต้นค่าที่เป็นประโยชน์บางอย่างสำหรับสมาชิกของออบเจ็กต์ ข้อผิดพลาด 'ไม่มีตัวสร้างการจับคู่สำหรับการเริ่มต้น' ใน C ++ เกิดขึ้นเมื่อมีข้อผิดพลาดในการประกาศของตัวสร้าง โดยปกติแล้ว คอมไพเลอร์ C++ จะสร้างคอนสตรัคเตอร์ขึ้นมาเอง แต่เมื่อผู้ใช้ประกาศคอนสตรัคเตอร์ จะต้องมีการประกาศพารามิเตอร์และเนื้อหาของคอนสตรัคเตอร์อย่างเหมาะสมเพื่อหลีกเลี่ยงข้อผิดพลาดดังกล่าว