Kesalahan C ++: Tidak Ada Overload yang Layak '=':

Kesalahan C Tidak Ada Overload Yang Layak



Kesalahan adalah operasi yang mungkin merupakan hasil dari kerja kode yang tidak normal. Kesalahan tidak dapat dideteksi pada saat penulisan sampai kami mengeksekusi kode atau dikompilasi. Beberapa kesalahan melarang kode dieksekusi hingga dihapus. Hari ini kita juga akan membahas error yang juga terjadi saat program dikompilasi, yaitu “error: no match for ‘operator='”. Kesalahan ini dapat disebabkan karena alasan seperti: jika kita telah melewati penunjuk tempat string akan diteruskan, memodifikasi variabel konstanta, dll. Tidak sulit untuk menghapus kesalahan 'tidak ada beban berlebih' tetapi tugas utamanya adalah untuk memahami kesalahan karena itu hanya menunjukkan kesalahan tanpa ada penjelasan tentang kesalahan.

Sintaksis

Tidak ada sintaks yang telah ditentukan sebelumnya untuk kesalahan ini karena ini bukan bagian dari kode atau keluaran, itu hanya ambiguitas yang mungkin disebabkan karena kode yang salah. Seperti yang dapat kita lihat, di bawah ini adalah contoh tampilan kesalahan.







kesalahan : tidak cocok untuk 'operator =

Contoh # 01:

Mari kita memiliki gagasan tentang kesalahan ini dan metode untuk mengatasinya. Untuk memahaminya dengan lebih baik, kami akan melakukan contoh di mana kami akan meneruskan nama menggunakan objek ke fungsi dan kemudian akan menampilkannya. Kami pertama-tama akan menyertakan file header iostream. Setelah itu, kita akan mendeklarasikan class bernama “my_object”. Di dalamnya, kami telah mendeklarasikan dua variabel string bernama 'F_name dan 'L_name', 'F_name' yang menunjukkan nama depan orang di mana 'L_name' menunjukkan nama belakang orang tersebut.



Selanjutnya, kami telah mendeklarasikan konstruktor publik bernama 'objek_saya ()' di mana kami menetapkan nilai nol untuk variabel 'F_name' dan 'L_name'. Setelah itu, kami mendeklarasikan fungsi lain yang telah kami berikan variabel tipe string 'fn' dan 'ln'. Di dalamnya, kami memanggil metode name_set() . Kemudian, kami mendeklarasikan dua fungsi anggota 'show()' dan 'name_set()'. Ketika fungsi “show() dipanggil, itu akan menampilkan nama depan dan nama belakang secara bersamaan. Sedangkan pada fungsi anggota “set_name()”, kita melewatkan dua variabel string bertipe string “fn” dan “ln” yang juga telah kita berikan ke konstruktor kedua.



Sekarang, dengan menggunakan operator penugasan salinan dari kelas my_object, kami mengambil satu parameter bertipe “my_object”. Kompiler selalu mendeklarasikannya sebagai anggota publik sebaris dari kelas apa pun. Di dalam anggota ini, kami telah menetapkan src.F_name ke 'F_name' dan src.L_name ke 'L_name' yang kami simpan salinan dari 'F_name' dan 'L_name'. Ini diteruskan ke anggota kelas my_object. Sekarang, kami telah mendeklarasikan objek kelas my_cobject bernama 'name1' yang kami berikan dua string 'Anna' dan 'smith' sebagai argumen. Ini akan memanggil konstruktor dan menampilkan nama depan bersama dengan nama belakang.





Setelah itu, kami membuat objek lain 'nama2' dan kemudian menetapkan nama ke objek itu secara terpisah. Setelah meneruskan nilai ke konstruktor untuk kedua objek, kami memanggil metode show() yang kemudian akan menampilkan nama kedua objek 'nam1' dan 'name2'. Di akhir kode, kami mengembalikan nilai nol dan mengeksekusi kode kami.

termasuk
kelas my_object {
pribadi :
std :: rangkaian F_name, L_name ;
publik :
my_object ( ) { F_name = ' ' ; L_name = ' ' ; }
my_object ( std :: rangkaian fn, std :: rangkaian di ) {
set_nama ( fn, ln ) ;
}
ruang kosong menunjukkan ( ) { std :: cout << 'Namanya adalah ' << F_name << ' ' << L_name << '. \n ' ; }
ruang kosong set_nama ( std :: rangkaian fn, std :: rangkaian di ) { F_name = fn ; L_name = di ; }
my_object & operator = ( const my_object & src ) {
F_name = src. F_name ;
L_name = src. L_name ;
kembali * ini ;
}

} ;
int utama ( int argumen, arang ** argumen ) {
nama_objek saya1 ( 'Anna' , 'pandai besi' ) ;
nama_objekku2 ;
nama2 = ( 'Anna' , 'pandai besi' ) ;
nama1. menunjukkan ( ) ;
nama2. menunjukkan ( ) ;
kembali 0 ;
}

Setelah eksekusi kode kami, kami memiliki kesalahan ini yang menunjukkan bahwa kami telah menulis kode yang salah pada baris 24 yang menunjukkan jenis kesalahan yang ditemui 'kesalahan: tidak cocok untuk 'operator =''. Sekarang, kami akan mencoba menyelesaikan kesalahan ini.



Untuk mengatasi kesalahan ini, kami memiliki beberapa cara untuk meneruskan nilai ke konstruktor kelas apa pun. Pada metode pertama, kami hanya akan menetapkan objek 'nama1' ke 'nama2' karena kami telah memberikan nilai yang sama ke kedua objek sehingga tidak perlu meneruskannya secara terpisah. Sekarang kita jalankan kodenya.

int utama ( int argumen, arang ** argumen ) {

nama_objek saya1 ( 'Anna' , 'pandai besi' ) ;
nama_objekku2 ;
nama2 = nama1 ;
nama1. menunjukkan ( ) ;
nama2. menunjukkan ( ) ;

Setelah melakukan perubahan pada kode seperti yang ditunjukkan di atas, kami mendapatkan hasil yang diberikan dalam cuplikan di bawah ini. Kami telah menampilkan nama yang diteruskan ke konstruktor berhasil ditampilkan tanpa kesalahan.

Metode kedua untuk mengatasi kesalahan ini adalah ketika kita harus meneruskan nilai yang berbeda ke kedua objek. Kami hanya akan menggunakan nama kelas bersama dengan nilai yang akan diteruskan ke konstruktor sebagai argumen. Kami melewati nama depan 'jhone' dan nama kedua 'smith'. Kemudian, kami mengeksekusi kodenya.

int utama ( int argumen, arang ** argumen ) {

nama_objek saya1 ( 'Anna' , 'pandai besi' ) ;
nama_objekku2 ;
nama2 = my_object ( 'John Smith' ) ;

nama1. menunjukkan ( ) ;
nama2. menunjukkan ( ) ;

Setelah mengeksekusi kode yang ditambahkan di atas, kami memiliki output seperti yang ditunjukkan di bawah ini. Untuk objek 'name1', ditampilkan nama 'Anna smith' dan untuk objek kedua 'name2' ditampilkan 'Jhone Smith'. Tapi kali ini kode kami berfungsi dengan baik tanpa ada kesalahan di dalamnya.

Sekarang, kami akan mencoba metode lain untuk mengeksekusi kode kami dengan sukses. Seperti dalam kasus di atas, kami mencoba menetapkan nilai ke objek menggunakan operator penugasan. Tapi kali ini, kita akan memberikan nilai pada saat deklarasi objek. Seperti yang bisa kita lihat di cuplikan di bawah, pada saat deklarasi objek 'name1', kita meneruskan nilai sebagai argumen ke objek yang mengulangi langkah yang sama untuk 'name2'. Sekarang, kami mengeksekusi kode sekali lagi.

int utama ( int argumen, arang ** argumen ) {
nama_objek saya1 ( 'Anna' , 'pandai besi' ) ;
nama_objekku2 ( 'John Smith' ) ;
nama1. menunjukkan ( ) ;
nama2. menunjukkan ( ) ;

Setelah kode dieksekusi untuk saat ini juga, kami tidak menemukan kesalahan apa pun yang berarti ini juga akan mencegah kami mengalami kesalahan apa pun.

Kesimpulan

Kami telah membahas secara singkat kesalahan yang mungkin kami hadapi saat mengerjakan fungsi yang diakses dari kelas. Kami juga telah mempelajari penyebab dan metode untuk mengatasi kesalahan “tidak ada kelebihan beban yang layak”. Sebagian besar kesalahan ini sulit dipahami oleh programmer baru, jadi kami mencoba membuatnya mudah untuk menghilangkannya dengan mengimplementasikan contoh dan juga dengan penjelasannya.