Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

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

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

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

ดังนั้นเมื่อเรายังคงส่งวิธีการที่ระบุประเภทไม่ถูกต้องหรือชุดพารามิเตอร์ที่ไม่เหมาะสมไปยังฟังก์ชัน คำจำกัดความของฟังก์ชันจะระบุชื่อของวิธีการให้กับคอมไพเลอร์ตลอดจนวิธีการเรียกใช้ มีการประกาศเนื้อหาทั้งหมดของฟังก์ชันอย่างชัดเจน ในบทความนี้ เราจะพูดถึงข้อผิดพลาด 'ไม่มีฟังก์ชันที่ตรงกันสำหรับการโทร' ปรากฏใน C ++ อย่างไร

ใช้วัตถุของคลาส

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

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

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

ในตอนเริ่มต้นของโค้ด เราจะรวมไลบรารี ซึ่งใช้สำหรับฟังก์ชันอินพุตและเอาต์พุต เรายังใช้เนมสเปซมาตรฐานอีกด้วย จากนั้นเราเริ่มต้นคลาสด้วยชื่อ 'A' และเราได้ระบุฟังก์ชัน setValue() สาธารณะ เรากำลังส่งพารามิเตอร์ของค่าด้วยประเภทข้อมูลจำนวนเต็มไปยังฟังก์ชันนี้ นอกจากนี้เรายังเริ่มต้นตัวแปร 'ค่า' ของคลาสที่มีประเภทข้อมูลจำนวนเต็ม

ในบรรทัดถัดไป เราจะเรียกใช้ฟังก์ชันอื่น setValue() วิธีนี้จะเก็บตัวแปร 'ค่า' ไว้เป็นอาร์กิวเมนต์ เราทำการเพิ่มค่าที่ถูกส่งผ่านเป็นอาร์กิวเมนต์ของมัน จากนั้นเราเรียกใช้ฟังก์ชัน main() และเราได้รับ 'argc' ที่มีประเภทข้อมูลจำนวนเต็มและตัวชี้ 'argv' ของประเภทข้อมูลอักขระเป็นอาร์กิวเมนต์ 'argc' คือหมายเลข ของพารามิเตอร์ที่ให้ไว้ในโค้ดจากระบบปฏิบัติการ 'argv' คือชุดของพารามิเตอร์

ตอนนี้เราสร้างวัตถุ 'obj' ของคลาส 'A' เราเรียกใช้ฟังก์ชัน setValue() 'obj' ถูกส่งผ่านเป็นข้อโต้แย้ง แต่เราไม่ได้เชื่อมโยงวัตถุกับชั้นเรียน นั่นคือเหตุผลที่เมื่อเราเรียกใช้ฟังก์ชัน setValue() มันจะส่งคืนข้อผิดพลาดเนื่องจากเราไม่มีคลาสนั้นที่เราเรียกใช้ฟังก์ชัน setValue() ในโค้ดข้างต้น เรากำลังส่งคลาสอ็อบเจ็กต์ภายในอาร์กิวเมนต์การเรียกฟังก์ชัน setValue() แต่ถ้าเราตรวจสอบในคำจำกัดความของฟังก์ชัน setValue() เราจะถือว่าค่าอาร์กิวเมนต์ที่ส่งเป็นจำนวนเต็ม หากต้องการยกเลิกโค้ด เราใช้คำสั่ง 'return 0' ที่นี่สามารถตรวจสอบผลลัพธ์ของโค้ดที่ระบุไว้ข้างต้นได้

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

เราได้รับข้อผิดพลาด 'ไม่มีฟังก์ชันที่ตรงกันสำหรับการเรียก A' หลังจากรันโค้ดที่กล่าวถึงข้างต้น

จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร

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

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

หลังจากใช้เนมสเปซมาตรฐานแล้ว เราจะแนะนำไฟล์ส่วนหัว เราสร้างคลาสชื่อ 'A' และเปิดเผยฟังก์ชัน setValue() ให้กับสาธารณะ ฟังก์ชันนี้รับตัวแปร 'ค่า' เป็นพารามิเตอร์ซึ่งมีประเภทข้อมูลเป็นจำนวนเต็ม นอกจากนี้เรายังเริ่มต้นตัวแปรประเภทข้อมูลจำนวนเต็มที่เรียกว่า 'ค่า' ในชั้นเรียน ตัวแปรนี้ถูกตั้งค่าเป็นสาธารณะด้วย บรรทัดถัดไปเรียกใช้ฟังก์ชันอื่นที่เรียกว่า setValue() ตัวแปร 'ค่า' ที่มีจำนวนเต็มประเภทข้อมูลถูกจัดเตรียมไว้เป็นพารามิเตอร์ในฟังก์ชันนี้ เราเพิ่มค่าที่จัดให้เป็นหนึ่งในอินพุต

ในขั้นตอนถัดไป เราจะเรียกใช้เมธอด main() ภายในฟังก์ชัน main() เราจะจัดเตรียม 'argc' ของประเภทข้อมูลจำนวนเต็มและ 'argv' ของประเภทข้อมูลอักขระเป็นอาร์กิวเมนต์ 'argc' แสดงจำนวนพารามิเตอร์ที่ระบบปฏิบัติการให้มาในโปรแกรม 'argv' คือการรวบรวมพารามิเตอร์ ตอนนี้เราจะสร้างวัตถุของคลาส 'A' เรียกว่า 'obj' เราเริ่มต้นตัวแปร 'ค่า' ด้วยประเภทข้อมูลจำนวนเต็ม เราได้ใช้เมธอด setValue() ของออบเจ็กต์และตั้งค่า 'value' เป็นพารามิเตอร์ของฟังก์ชันนี้

ในตอนท้ายเราเพิ่ม 'return 0' เพื่อปิดโปรแกรม โปรดจำไว้ว่าเราต้องป้อนข้อมูลประเภทเดียวกันของฟังก์ชันและอาร์กิวเมนต์ของฟังก์ชันในฟังก์ชัน main() จากนั้นเราได้ส่งฟังก์ชันนั้นไปยังวัตถุแล้วส่งคืน ที่นี่สามารถตรวจสอบผลลัพธ์ของโค้ดที่ระบุไว้ข้างต้นได้

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

บทสรุป

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

เกี่ยวกับผู้เขียน

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

คัลซูม บีบี

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