Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Selesaikan masalah "ralat: tiada fungsi sepadan untuk panggilan ke 'fungsi'" yang muncul dalam kod C++

Selesaikan masalah "ralat: tiada fungsi sepadan untuk panggilan ke 'fungsi'" yang muncul dalam kod C++

PHPz
PHPzasal
2023-08-26 17:37:065812semak imbas

解决C++代码中出现的“error: no matching function for call to 'function'”问题

Selesaikan masalah "ralat: tiada fungsi yang sepadan untuk panggilan ke 'fungsi'" dalam kod C++

Dalam proses pengaturcaraan dengan C++, kita sering menghadapi "ralat: tiada fungsi yang sepadan untuk panggilan ke 'fungsi'" ' " mesej ralat. Ralat ini biasanya bermaksud bahawa apabila fungsi dipanggil, pengkompil tidak dapat mencari definisi fungsi yang sepadan dengan panggilan fungsi. Biasanya terdapat beberapa kemungkinan punca untuk situasi ini, dan butiran berikut cara menyelesaikan isu ini, bersama-sama dengan beberapa kod sampel untuk digambarkan.

  1. Ketakpadanan jenis parameter fungsi

Dalam C++, panggilan fungsi mesti sepadan dengan jenis parameter yang ditentukan oleh fungsi. Jika jenis parameter yang dihantar semasa memanggil fungsi tidak sepadan dengan jenis parameter yang ditakrifkan oleh fungsi, ralat "tiada fungsi padanan untuk panggilan ke 'fungsi'" akan berlaku. Contohnya:

// 定义一个函数,接受一个整数参数
void printNumber(int num) {
    cout << "Number: " << num << endl;
}

int main() {
    double num = 3.14;
    printNumber(num);  // 错误:找不到匹配的函数定义
    return 0;
}

Dalam kod di atas, fungsi printNumber yang menerima parameter integer ditakrifkan, dan kemudian dalam fungsi utama, cuba hantar parameter jenis dua untuk memanggil fungsi printNumber. Oleh kerana jenis parameter tidak sepadan, pengkompil tidak dapat mencari definisi fungsi yang sepadan, jadi ralat dilaporkan.

Cara untuk menyelesaikan masalah ini adalah untuk memastikan bahawa jenis parameter panggilan fungsi sepadan dengan jenis parameter yang ditentukan oleh fungsi. Ini boleh dicapai dengan menghantar, contohnya:

int main() {
    double num = 3.14;
    printNumber((int)num);  // 强制将num转换为整数类型
    return 0;
}

Dalam kod contoh ini, dengan menghantar nombor jenis berganda kepada jenis int, ia boleh memadankan jenis parameter fungsi printNumber, sekali gus menyelesaikan ralat kompilasi.

  1. Bilangan parameter fungsi tidak sepadan

Selain daripada ketidakpadanan jenis parameter, bilangan parameter fungsi juga boleh menyebabkan ralat "tiada fungsi padanan untuk panggilan ke 'fungsi'". Apabila bilangan parameter yang disediakan semasa memanggil fungsi tidak konsisten dengan bilangan parameter yang ditentukan oleh fungsi, pengkompil tidak dapat mencari definisi fungsi yang sepadan dan akan melaporkan ralat. Contohnya:

// 定义一个接受两个整数参数的函数
void addNumbers(int num1, int num2) {
    int sum = num1 + num2;
    cout << "Sum: " << sum << endl;
}

int main() {
    int num = 10;
    addNumbers(num);  // 错误:找不到匹配的函数定义
    return 0;
}

Dalam kod di atas, fungsi addNumbers ditakrifkan yang menerima dua parameter integer, dan kemudian hanya satu parameter integer dihantar ke fungsi utama untuk memanggil fungsi addNumbers. Oleh kerana bilangan parameter tidak sepadan, pengkompil tidak dapat mencari definisi fungsi yang sepadan, jadi ralat akan dilaporkan.

Cara untuk menyelesaikan masalah ini adalah dengan memastikan bilangan parameter yang dipanggil oleh fungsi sepadan dengan bilangan parameter yang ditentukan oleh fungsi. Ini boleh dicapai dengan menyediakan parameter yang hilang atau memadamkan parameter berlebihan, contohnya:

int main() {
    int num1 = 10;
    int num2 = 20;
    addNumbers(num1, num2);  // 提供两个参数
    return 0;
}

Dalam kod contoh ini, memanggil fungsi addNumbers dengan menyediakan dua parameter integer memastikan bilangan parameter sepadan, sekali gus menyelesaikan ralat penyusunan.

  1. Fungsi tidak ditentukan atau terlebih beban

Sebab lain yang mungkin ialah fungsi tidak ditentukan atau terlebih beban. Jika fungsi yang dipanggil tidak ditakrifkan dalam kod, atau berbilang fungsi dibebankan, pengkompil tidak boleh menentukan fungsi yang hendak dipanggil apabila fungsi dipanggil, dan akan melaporkan ralat "tiada fungsi sepadan untuk panggilan ke 'fungsi'". Contohnya:

// 定义两个函数,一个接受整数参数,一个接受字符参数
void printValue(int num) {
    cout << "Value: " << num << endl;
}

void printValue(char ch) {
    cout << "Character: " << ch << endl;
}

int main() {
    double num = 3.14;
    printValue(num);  // 错误:找不到匹配的函数定义
    return 0;
}

Dalam kod contoh di atas, dua fungsi terlampau printValue ditakrifkan, masing-masing menerima parameter integer dan aksara. Kemudian masukkan parameter jenis berganda dalam fungsi utama untuk memanggil fungsi printValue. Disebabkan kewujudan definisi fungsi terlampau beban, pengkompil tidak dapat menentukan fungsi yang hendak dipanggil dan melaporkan ralat.

Cara untuk menyelesaikan masalah ini adalah dengan memastikan panggilan fungsi adalah unik, iaitu, tiada banyak fungsi berlebihan. Jika terdapat berbilang fungsi terlebih beban, anda boleh memanggil fungsi secara eksplisit dengan menghantar, contohnya:

int main() {
    double num = 3.14;
    printValue((int)num);  // 强制调用接受整数参数的函数
    return 0;
}

Dalam kod contoh ini, fungsi yang menerima parameter integer dipanggil dengan menghantar nombor jenis berganda kepada jenis int, Ini menyelesaikan masalah ralat penyusunan.

Dalam pengaturcaraan sebenar, beri perhatian kepada pemadanan jenis dan nombor parameter serta definisi dan kelebihan beban fungsi untuk mengelakkan ralat "ralat: tiada fungsi pemadanan untuk panggilan ke 'fungsi'". Apabila menghadapi ralat seperti ini, anda boleh menyemak panggilan fungsi dan definisi fungsi dengan teliti untuk mengetahui punca ketidakpadanan, dan kemudian mengambil penyelesaian yang sesuai untuk berjaya menyelesaikan masalah.

Atas ialah kandungan terperinci Selesaikan masalah "ralat: tiada fungsi sepadan untuk panggilan ke 'fungsi'" yang muncul dalam kod C++. 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