Ralat sintaks C++: Parameter lalai tidak boleh digunakan dalam parameter fungsi Apakah yang perlu saya lakukan?

WBOY
Lepaskan: 2023-08-22 11:15:37
asal
1623 orang telah melayarinya

Ralat sintaks C++: Parameter lalai tidak boleh digunakan dalam parameter fungsi Apakah yang perlu saya lakukan?

C++ ialah bahasa pengaturcaraan berkuasa yang sering digunakan untuk membangunkan pelbagai jenis aplikasi dan perisian. Walau bagaimanapun, semasa pengaturcaraan C++, anda mungkin menghadapi situasi di mana parameter lalai tidak boleh digunakan dalam parameter fungsi Ini biasanya disebabkan oleh ralat sintaks. Jadi, bagaimana untuk menangani kesalahan tatabahasa seperti ini? Artikel ini akan memperkenalkan beberapa kaedah pengendalian ralat untuk membantu anda memahami pengaturcaraan C++ dengan lebih baik.

Mula-mula, mari kita fahami apakah parameter lalai. Dalam C++, anda boleh menetapkan nilai lalai untuk parameter dalam definisi fungsi. Dengan cara ini, apabila kita memanggil fungsi, jika parameter yang sepadan tidak diluluskan, pengkompil akan menggunakan nilai lalai. Sebagai contoh, kod berikut mentakrifkan fungsi add(), di mana parameter a dan b mempunyai nilai lalai:

int add(int a = 0, int b = 0) {
    return a + b;
}
Salin selepas log masuk

Apabila memanggil fungsi add(), kita tidak boleh menghantar parameter dan menggunakan nilai lalai:

int result = add(); // result = 0
Salin selepas log masuk

Walau bagaimanapun, dalam fungsi Bagaimanakah kita harus menangani kes di mana parameter lalai tidak boleh digunakan dalam parameter? Ini biasanya termasuk situasi berikut:

Kes 1: Ketidakkonsistenan antara pengisytiharan fungsi dan definisi fungsi

Dalam C++, fungsi biasanya perlu diisytiharkan dan ditakrifkan di kedua-dua tempat Pengisytiharan biasanya diletakkan dalam fail pengepala, dan definisinya adalah biasanya diletakkan dalam fail sumber. Jika parameter lalai ditetapkan dalam pengisytiharan fungsi tetapi tidak dalam definisi fungsi, akan ada masalah bahawa parameter lalai tidak boleh digunakan dalam parameter. Contohnya:

// 声明
int add(int a, int b = 0);

// 定义
int add(int a, int b) {
    return a + b;
}
Salin selepas log masuk

Parameter b dalam pengisytiharan di sini mempunyai nilai lalai, tetapi parameter b dalam definisi tidak mempunyai nilai lalai dan masalah akan timbul. Penyelesaiannya adalah dengan menambah parameter lalai dalam definisi:

// 声明
int add(int a, int b = 0);

// 定义
int add(int a, int b /*= 0*/) {
    return a + b;
}
Salin selepas log masuk

Tambah ulasan /= 0/ pada parameter b dalam definisi, menunjukkan bahawa parameter ini pada asalnya mempunyai nilai lalai, tetapi telah terlebih muatan dalam definisi .

Kes 2: Lebih muatan fungsi

Pembebanan fungsi merujuk kepada mentakrifkan berbilang fungsi dengan nama yang sama dalam skop yang sama, tetapi senarai parameternya berbeza. Dalam kes lebihan fungsi, jika nilai lalai digunakan dalam parameter fungsi, maka parameter fungsi lain dengan nama yang sama juga mesti ditetapkan kepada nilai lalai. Contohnya:

int add(int a, int b) {
    return a + b;
}

int add(int a) {
    return a + 10;
}

int add(int a, int b = 0) {
    return a + b;
}
Salin selepas log masuk

Tiga fungsi add() dengan nama yang sama ditakrifkan di sini Parameter fungsi kedua tidak mempunyai nilai lalai, manakala parameter dua fungsi lain menggunakan nilai lalai. Ini akan menyebabkan pengkompil tidak dapat menentukan fungsi yang hendak dipanggil, mengakibatkan ralat bahawa parameter lalai tidak boleh digunakan dalam parameter. Penyelesaiannya adalah untuk menambah nilai lalai pada parameter semua fungsi dengan nama yang sama:

int add(int a, int b = 0) {
    return a + b;
}

int add(int a = 0) {
    return a + 10;
}

int add(int a, int b = 0) {
    return a + b;
}
Salin selepas log masuk

Di sini, nilai lalai juga ditambahkan pada parameter a fungsi kedua, dan juga pada parameter pertama dan ketiga fungsi nilai lalai.

Kes 3: Penunjuk fungsi dan rujukan fungsi

Dalam C++, penunjuk fungsi dan rujukan fungsi juga boleh menyebabkan ralat bahawa parameter lalai tidak boleh digunakan dalam parameter. Ini kerana apabila kita memanggil fungsi menggunakan penunjuk fungsi atau rujukan fungsi, pengkompil tidak dapat menentukan sama ada parameter fungsi mempunyai nilai lalai. Contohnya:

typedef int(*add_func_ptr)(int a, int b = 0);

add_func_ptr p = add; // 函数指针

int(&add_ref)(int, int = 0) = add; // 函数引用

int result = p(1); // 编译错误:参数中不能使用默认参数

int result2 = add_ref(1); // 编译错误:参数中不能使用默认参数
Salin selepas log masuk

Penyelesaian adalah dengan menambah nilai lalai pada senarai parameter penunjuk fungsi atau rujukan fungsi:

typedef int(*add_func_ptr)(int a, int b /*= 0*/);

add_func_ptr p = add;

int(&add_ref)(int, int /*= 0*/) = add;

int result = p(1); // 成功调用add(1, 0)

int result2 = add_ref(1); // 成功调用add(1, 0)
Salin selepas log masuk

Ringkasnya, apabila kita menghadapi ralat bahawa parameter lalai tidak boleh digunakan dalam parameter, kita harus berhati-hati semak kod untuk mengetahui lokasi ralat. Jika ia adalah masalah dengan lebihan fungsi atau penunjuk fungsi dan rujukan fungsi, nilai lalai harus ditambah pada senarai parameter semua fungsi yang sepadan. Untuk ketidakkonsistenan antara pengisytiharan fungsi dan definisi fungsi, nilai lalai juga perlu ditambah pada parameter dalam definisi. Selagi kaedah pemprosesan mudah ini digunakan, ralat bahawa parameter lalai tidak boleh digunakan dalam parameter boleh diselesaikan.

Atas ialah kandungan terperinci Ralat sintaks C++: Parameter lalai tidak boleh digunakan dalam parameter fungsi Apakah yang perlu saya lakukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan