Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada fungsi yang sepadan untuk panggilan ke 'fungsi'?

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada fungsi yang sepadan untuk panggilan ke 'fungsi'?

WBOY
WBOYasal
2023-08-25 16:31:588701semak imbas

解决C++编译错误:'no matching function for call to 'function'',如何解决?

Selesaikan ralat kompilasi C++: 'tiada fungsi padanan untuk panggilan ke 'fungsi', bagaimana untuk menyelesaikannya?

Apabila menulis program dalam C++, kita sering menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "tiada fungsi yang sepadan untuk panggilan ke 'fungsi'". Ralat ini biasanya berlaku apabila fungsi dipanggil dan pengkompil tidak dapat mencari pengisytiharan atau definisi fungsi yang sepadan. Artikel ini memperincikan cara menyelesaikan ralat kompilasi ini dan menyediakan beberapa kod sampel.

Mula-mula, mari lihat contoh mudah:

#include <iostream>

void add(int a, int b) {
    std::cout << "Sum: " << a + b << std::endl;
}

int main() {
    add(1, 2, 3);  // 调用了错误的函数
    return 0;
}

Dalam kod di atas, kami mentakrifkan fungsi tambah untuk mengira jumlah dua integer. Dalam fungsi utama, kami tersilap memanggil fungsi tambah dan lulus tiga parameter. Memandangkan kami tidak menyediakan versi lebihan fungsi tambah yang menerima tiga parameter, pengkompil tidak akan dapat mencari pengisytiharan atau definisi fungsi yang sepadan, mengakibatkan ralat penyusunan.

Untuk menyelesaikan masalah ini, kita perlu melihat mesej ralat dan mencari baris kod yang salah. Pengkompil biasanya memberikan beberapa petunjuk tentang ralat dalam mesej ralat, seperti tiada pengisytiharan atau definisi fungsi yang sepadan ditemui. Berdasarkan petua ini, kami boleh menentukan sebab ralat berlaku dan mengubah suai kod tersebut dengan sewajarnya.

Dalam contoh ini, pengkompil akan melaporkan ralat: "tiada fungsi padanan untuk panggilan untuk 'tambah'". Mesej ralat ini memberitahu kami bahawa fungsi tambah yang kami panggil tidak menemui pengisytiharan atau definisi fungsi yang sepadan. Untuk membetulkan ralat ini, kita perlu mengubah suai parameter panggilan fungsi untuk memastikan ia konsisten dengan parameter yang ditakrifkan oleh fungsi.

Cara untuk membetulkan ralat di atas adalah dengan mengalih keluar parameter tambahan supaya panggilan fungsi sepadan dengan definisi fungsi seperti yang ditunjukkan di bawah:

#include <iostream>

void add(int a, int b) {
    std::cout << "Sum: " << a + b << std::endl;
}

int main() {
    add(1, 2);
    return 0;
}

Dalam kod yang diubah suai, kami mengalih keluar parameter tambahan "3" supaya panggilan fungsi sepadan fungsi Tentukan padanan. Dengan cara ini, pengkompil akan dapat mencari definisi fungsi yang dinamakan menambah dan menyusun atur cara dengan jayanya.

Selain daripada ketidakpadanan parameter panggilan fungsi, terdapat beberapa sebab biasa lain yang boleh menyebabkan ralat "tiada fungsi padanan untuk panggilan ke 'fungsi'". Di bawah disenaraikan beberapa situasi dan penyelesaian biasa.

  1. Pengisytiharan fungsi dan jenis parameter yang ditentukan tidak sepadan.
    Sebagai contoh, jika pengisytiharan fungsi menggunakan parameter jenis int, dan definisi fungsi menggunakan parameter apungan jenis, pengkompil tidak akan dapat mencari pengisytiharan atau definisi fungsi yang sepadan. Penyelesaiannya adalah untuk memastikan bahawa jenis dan bilangan parameter adalah konsisten antara pengisytiharan fungsi dan definisi.
  2. Konflik lebihan fungsi.
    Jika terdapat lebihan fungsi berbilang dengan jenis dan nombor parameter yang sama, pengkompil tidak akan dapat menentukan fungsi terlampau beban untuk dipanggil. Penyelesaiannya adalah untuk menyediakan lebihan fungsi dengan jenis parameter yang lebih khusus, atau secara eksplisit menghantar parameter kepada jenis yang diperlukan.
  3. Fungsi tidak diisytiharkan atau ditakrifkan.
    Sebelum memanggil fungsi, biasanya kita perlu memberikan pengisytiharan atau definisi fungsi supaya pengkompil boleh mencari dan memautkan fungsi tersebut. Jika fungsi tidak diisytiharkan atau ditakrifkan, pengkompil akan melaporkan ralat "tiada fungsi padanan untuk panggilan ke 'fungsi'". Penyelesaiannya adalah dengan menyediakan pengisytiharan atau definisi fungsi.

Ringkasnya, apabila kita menyelesaikan ralat kompilasi C++ "tiada fungsi yang sepadan untuk panggilan ke 'fungsi'", kita perlu menyemak mesej ralat dan menentukan punca ralat. Kami kemudiannya boleh menggunakan pembayang yang disediakan oleh mesej ralat untuk mengubah suai kod untuk memastikan bahawa panggilan fungsi sepadan dengan pengisytiharan atau definisi fungsi. Dengan mengubah suai parameter fungsi panggilan dengan betul, kami berjaya menyelesaikan ralat kompilasi ini supaya atur cara boleh menyusun dan berjalan dengan jayanya.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada fungsi yang sepadan untuk panggilan ke 'fungsi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn