Penyelesaian kepada ralat kompilasi C++: 'tiada padanan untuk panggilan ke 'fungsi', bagaimana untuk menyelesaikannya?
Apabila membangun menggunakan bahasa pengaturcaraan C++, kita pasti akan menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "tiada padanan untuk panggilan ke 'fungsi'". Ralat ini biasanya berlaku apabila kita cuba memanggil objek fungsi. Artikel ini akan menerangkan punca ralat ini dan menyediakan beberapa penyelesaian.
Mula-mula, mari lihat contoh mudah ralat ini:
#include <iostream> class MyFunctor { public: void operator()(int x) { std::cout << "Hello world! The value of x is: " << x << std::endl; } }; int main() { MyFunctor myFunctor; myFunctor(10); // 编译错误发生在这里 return 0; }
Dalam contoh di atas, kami telah menentukan kelas yang dipanggil MyFunctor
yang melebihkan operator panggilan fungsi< code>operator() kod>, dan keluarkan mesej dalam fungsi. Dalam fungsi main
, kami mencipta objek myFunctor
jenis MyFunctor
dan cuba melaksanakan operasi fungsi dengan memanggil objek ini. Walau bagaimanapun, apabila kami cuba menyusun kod ini, kami menghadapi ralat kompilasi di atas. MyFunctor
的类,它重载了函数调用操作符operator()
,并在该函数中输出一条消息。在main
函数中,我们创建了一个MyFunctor
类型的对象myFunctor
,并尝试通过调用这个对象来执行函数操作。然而,当我们尝试编译这段代码时,就会遇到上述的编译错误。
这个错误的原因是,C++编译器无法找到匹配的函数来执行对函数对象的调用。当我们尝试调用一个函数对象时,编译器会查找一个与调用参数类型匹配的重载了函数调用操作符的函数。如果找不到匹配的函数,编译器就会报错。
要解决这个错误,我们可以采取以下几种方法:
MyFunctor
类添加一个接受const
修饰的参数的重载函数:class MyFunctor { public: void operator()(int x) { std::cout << "Hello world! The value of x is: " << x << std::endl; } void operator()(const int& x) { std::cout << "Hello world! The value of x is (const ref): " << x << std::endl; } };
在这种情况下,我们可以通过使用一个const
const</code > parameter diubah suai: <ol start="3"><li><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>int main() {
MyFunctor myFunctor;
myFunctor(10); // 调用重载函数 void operator()(const int& x)
return 0;
}</pre><div class="contentsignin">Salin selepas log masuk</div></div></li>Dalam kes ini, kita boleh mengelakkan kompilasi dengan menghantar parameter menggunakan kesilapan rujukan <code>const
. Contohnya: int main() { MyFunctor myFunctor; myFunctor(static_cast<int>(10)); // 显式转换类型为 int return 0; }
int main() { MyFunctor myFunctor; void (MyFunctor::*functionPtr)(int) = &MyFunctor::operator(); (myFunctor.*functionPtr)(10); // 通过函数指针间接调用函数对象的函数调用操作符 return 0; }
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada padanan untuk panggilan ke 'fungsi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!