
No matching function for call หมายถึงเมื่อเราเรียกฟังก์ชันบางตัว แต่ ID ของฟังก์ชันนั้นไม่ตรงกับอาร์กิวเมนต์ของฟังก์ชันที่ถูกกำหนดไว้ ดังนั้นเราจึงได้ข้อผิดพลาด 'no matching function for a call' ใน C++ ทุกครั้งที่คอมไพเลอร์ระบุว่าไม่มีเมธอดที่ตรงกัน มันโดยทั่วไปบ่งชี้ว่าคอมไพเลอร์ระบุเมธอดโดยชื่อที่เหมือนกันเหมือนกับที่เราส่งพารามิเตอร์ให้ฟังก์ชัน
ดังนั้น เมื่อเราส่งต่อเมธอดที่ระบุของประเภทที่ผิดหรือชุดพารามิเตอร์ที่ไม่เหมาะสมให้ฟังก์ชัน การกำหนดฟังก์ชันจะระบุชื่อเมธอดให้คอมไพเลอร์รวมถึงวิธีการเรียกใช้ ฟังก์ชันทั้งหมดจะถูกประกาศอย่างชัดเจน ในบทความนี้ เราจะพูดถึงว่าข้อผิดพลาด 'No matching function for a call' ปรากฏใน C++ อย่างไร
ใช้ Object ของคลาส
ในสถานการณ์นี้ พารามิเตอร์ของฟังก์ชันไม่ตรงกันระหว่างการเรียก เราจะลองส่ง Pointers ที่ต้องการ References และใช้ประเภท Reference ของคลาสที่ต่างกันในการเรียกฟังก์ชัน ทุกครั้งที่เราเรียกใช้ฟังก์ชันแต่นิยามฟังก์ชันของอาร์กิวเมนต์ไม่ตรงกัน ข้อผิดพลาด 'No matching function for call to C++' จะถูกยกขึ้น
ตอนนี้เราต้องแก้ไขข้อผิดพลาดนี้ เพื่อวัตถุประสงค์นี้ เราเพียงแค่ให้พารามิเตอร์ที่ตรงกันและเหมาะสมระหว่างการกำหนดฟังก์شัน โค้ดพร้อมคำอธิบายโดยละเอียดสามารถดูได้ด้านล่าง

ในตอนต้นของโค้ด เราจะ include ไลบรารี <iostream> ซึ่งใช้สำหรับฟังก์ชันนำเข้าและส่งออก เรายังใช้ standard namespace ด้วย จากนั้นเราเริ่มต้นคลาสชื่อ 'A' และระบุฟังก์ชัน setValue() เป็น public เราส่งพารามิเตอร์ value ด้วยชนิดข้อมูล integer ให้ฟังก์ชันนี้ เรายังเริ่มต้นตัวแปร 'value' ของคลาสที่มีชนิดข้อมูล integer
ในบรรทัดถัดไป เราเรียกใช้ฟังก์ชัน setValue() อีกครั้ง เมธอดนี้รับตัวแปร 'value' เป็นอาร์กิวเมนต์ เราทำการเพิ่มค่าใน value ที่ส่งผ่านเป็นอาร์กิวเมนต์ จากนั้นเราเรียกฟังก์ชัน main() และเราได้รับ 'argc' ที่มีชนิดข้อมูล integer และ 'argv' pointer ของชนิดข้อมูล character เป็นอาร์กิวเมนต์ 'argc' คือจำนวนพารามิเตอร์ที่ให้ในโค้ดจากระบบปฏิบัติการ 'argv' คือชุดของพารามิเตอร์
ตอนนี้เราสร้าง object 'obj' ของคลาส 'A' เราเรียกใช้เมธอด setValue() function 'obj' ถูกส่งเป็นอาร์กิวเมนต์ แต่เราไม่ได้เชื่อมโยง object กับคลาส นั่นคือเหตุผลที่เมื่อเราเรียกฟังก์ชัน setValue() มันคืนค่าข้อผิดพลาดเพราะเราไม่มีคลาสนั้นที่เราเรียก setValue() function ในโค้ดข้างต้น เราส่ง object ของคลาสภายในอาร์กิวเมนต์การเรียกฟังก์ชัน setValue() แต่ถ้าเราตรวจสอบในนิยามฟังก์ชัน setValue() เราสมมติว่าอาร์กิวเมนต์ที่ส่งผ่านเป็น integer เพื่อจบโค้ด เราใช้คำสั่ง 'return 0' ผลลัพธ์ของโค้ดข้างต้นสามารถตรวจสอบได้

เราได้ข้อผิดพลาด 'no matching function for call to A' หลังจากรันโค้ดข้างต้น
วิธีแก้ไขข้อผิดพลาดนี้?
เพื่อแก้ไขข้อผิดพลาดนี้ระหว่างการเรียกเมธอด เราต้องให้พารามิเตอร์ที่ตรงกันและเพียงพอให้ฟังก์ชัน อีกวิธีหนึ่งในการแก้ไขคือการสร้างฟังก์ชัน overloaded หลายๆ ตัวที่มีพารามิเตอร์ต่างกัน ที่นี่เราเพียงแค่แก้ไขอาร์กิวเมนต์ของฟังก์ชัน main() ดังนั้น ข้อผิดพลาด 'no matching function for the call' ใน C++ จะถูกกำจัด โค้ดพร้อมคำอธิบายโดยละเอียดสามารถดูได้ด้านล่าง

หลังจากใช้ standard namespace เรา introduce ไฟล์ header <iostream> เราสร้างคลาสชื่อ 'A' และทำให้ฟังก์ชัน setValue() เป็น public ฟังก์ชันนี้รับตัวแปร 'value' เป็นพารามิเตอร์ ซึ่งมีชนิดข้อมูล integer เรายังเริ่มต้นตัวแปร 'value' ชนิดข้อมูล integer ในคลาส ตัวแปรนี้ก็ถูกตั้งเป็น public ด้วย บรรทัดถัดไปเรียกฟังก์ชัน setValue() อีกครั้ง ตัวแปร 'value' ชนิดข้อมูล integer ถูกส่งเป็นพารามิเตอร์ในฟังก์ชันนี้ เราเพิ่มค่าที่ส่งเป็นอินพุตหนึ่ง
ในขั้นตอนต่อไป เราเรียกเมธอด main() ภายในฟังก์ชัน main() เราจะให้ 'argc' ชนิดข้อมูล integer และ 'argv' ชนิดข้อมูล character เป็นอาร์กิวเมนต์ 'argc' แสดงจำนวนพารามิเตอร์ที่ระบบปฏิบัติการให้ในโปรแกรม 'argv' คือชุดพารามิเตอร์ ตอนนี้เราจะสร้าง object ของคลาส 'A' ชื่อ 'obj' เราเริ่มต้นตัวแปร 'value' ด้วยชนิดข้อมูล integer เราใช้เมธอด setValue() ของ object และตั้ง 'value' เป็นพารามิเตอร์ของฟังก์ชันนี้
ในที่สุด เราเพิ่ม 'return 0' เพื่อปิดโปรแกรม จำไว้ว่าเราต้องใส่ชนิดข้อมูลเดียวกันของฟังก์ชันและอาร์กิวเมนต์ของมันในฟังก์ชัน main() จากนั้นเราส่งฟังก์ชันนั้นให้ object และคืนค่า ผลลัพธ์ของโค้ดข้างต้นสามารถตรวจสอบได้

สรุป
ในบทความนี้ เราได้สำรวจเหตุผลของการได้ข้อผิดพลาด 'no matching function for a call' และวิธีแก้ไข ทุกครั้งที่เราได้รับข้อผิดพลาดนี้ เราต้องตรวจสอบพารามิเตอร์ของเมธอดที่ต้องการรวมถึงชนิดข้อมูลของมัน เราทำผิดพลาดขณะให้อาร์กิวเมนต์ให้อาร์กิวเมนต์ของฟังก์ชัน เราจับคู่อาร์กิวเมนต์กับฟังก์ชันผิด เราอาจต้องให้พารามิเตอร์ที่ตรงกับเมธอดที่ระบุ หรือเราต้องเพิ่มฟังก์ชันใหม่ด้วยชนิดข้อมูลเดียวกัน หลังจากตรวจสอบและเพิ่มพารามิเตอร์ที่เหมาะสมให้ฟังก์ชันในโปรแกรม ข้อผิดพลาด 'no matching function for a call' จะถูกแก้ไข
เกี่ยวกับผู้เขียน

Kalsoom Bibi
สวัสดี ผมเป็นนักเขียนอิสระ และมักเขียนเนื้อหาเกี่ยวกับ Linux และเทคโนโลยีอื่นๆ