Rumah > Artikel > pembangunan bahagian belakang > Ralat penyusunan C++: Pengendali terlampau beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas Bagaimana saya perlu mengubah suainya?
Ralat kompilasi C++: Pengendali terlampau beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas Bagaimana saya perlu mengubah suainya?
Dalam C++, kami boleh menyesuaikan tingkah laku pengendali dengan melebihkan operator. Walau bagaimanapun, apabila membebankan operator, kita perlu memberi perhatian kepada jenis parameter. Salah satu ralat kompilasi yang paling biasa ialah "pengendali terlampau beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas". Artikel ini menerangkan punca ralat ini dan cara membetulkannya.
Operator terlampau beban ialah fungsi yang ditakrifkan menggunakan kata kunci "operator" dan mereka boleh menerima parameter seperti fungsi biasa. C++ menetapkan bahawa pengendali terlebih beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas Ini kerana operator digunakan untuk mengendalikan objek kelas, dan sekurang-kurangnya satu parameter jenis kelas diperlukan untuk menyelesaikan operasi ini.
Sebagai contoh, apabila kita mentakrifkan kelas yang dipanggil "myClass" dan menambah operator "+" padanya, kita perlu lulus sekurang-kurangnya satu parameter jenis "myClass" untuk melaksanakan operasi penambahan. Jika kita mentakrifkan operator tanpa parameter jenis kelas, pengkompil tidak akan mengenali operator.
Kaedah 1: Tambah parameter jenis kelas
Penyelesaian yang paling biasa ialah menambah parameter jenis kelas kepada operator seperti ini:
class myClass{ public: int val; myClass operator+(const myClass& other){ myClass result; result.val = this->val + other.val; return result; } };
Dalam kod di atas, kami telah menambah parameter jenis kelas untuk "+" operator Parameter jenis myClass bernama "lain" yang melaluinya dua objek myClass boleh ditambah.
Kaedah 2: Gunakan fungsi global
Operator yang lebih muatan juga boleh ditakrifkan menggunakan fungsi global. Jika anda menggunakan fungsi global untuk membebankan operator, anda tidak memerlukan parameter jenis kelas dan menggunakan parameter jenis biasa untuk melaksanakan operasi.
Sebagai contoh, kita boleh mentakrifkan pengendali "+" dengan cara berikut:
class myClass{ public: int val; }; myClass operator+(const myClass& obj1, const myClass& obj2){ myClass result; result.val = obj1.val + obj2.val; return result; }
Dalam kod di atas, kami telah melebihkan operator "+" dengan mentakrifkan fungsi global. Dalam fungsi ini, kami menerima dua rujukan tetap objek myClass sebagai parameter dan mengembalikan objek myClass sebagai hasil operasi.
Kaedah 3: Gunakan fungsi rakan
Cara lain untuk membetulkan ralat ini ialah menggunakan fungsi rakan. Dalam C++, anda boleh menggunakan kata kunci "rakan" untuk mengisytiharkan fungsi bukan ahli dalam kelas supaya fungsi itu boleh mengakses ahli peribadi kelas.
Kemudian kita boleh membebankan operator "+" dengan cara berikut:
class myClass{ friend myClass operator+(myClass obj1, myClass obj2){ myClass result; result.val = obj1.val + obj2.val; return result; } public: int val; };
Dalam kod di atas, kita menggunakan fungsi rakan untuk melebihkan operator "+". Dengan mengisytiharkan fungsi sebagai fungsi rakan dalam kelas myClass, anda boleh terus mengakses ahli peribadi kelas tersebut. Pada ketika ini, kami menghantar dua objek myClass sebagai parameter kepada fungsi dan mengembalikan objek myClass sebagai hasil operasi.
Ringkasan:
Pengendali terlampau muatan ialah ciri berkuasa dalam C++ yang boleh membantu kami menyesuaikan gelagat pengendali. Walau bagaimanapun, apabila membebankan operator, anda perlu berhati-hati dengan jenis parameter untuk mengelakkan ralat penyusunan. Jika anda mendapat ralat "Operator terlampau beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas", anda boleh menggunakan mana-mana kaedah di atas untuk membetulkannya.
Atas ialah kandungan terperinci Ralat penyusunan C++: Pengendali terlampau beban mesti mempunyai sekurang-kurangnya satu parameter jenis kelas Bagaimana saya perlu mengubah suainya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!