วิธีแก้ไขข้อผิดพลาด 'ไม่มีตัวสร้างที่ตรงกันสำหรับการเริ่มต้น' ใน C ++

Withi Kaekhi Khx Phid Phlad Mimi Taw Srang Thi Trng Kan Sahrab Kar Reim Tn Ni C



ในภาษา 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++ จะสร้างคอนสตรัคเตอร์ขึ้นมาเอง แต่เมื่อผู้ใช้ประกาศคอนสตรัคเตอร์ จะต้องมีการประกาศพารามิเตอร์และเนื้อหาของคอนสตรัคเตอร์อย่างเหมาะสมเพื่อหลีกเลี่ยงข้อผิดพลาดดังกล่าว