C++ Hatası: Uygulanabilir Aşırı Yük Yok '=':

C Hatasi Uygulanabilir Asiri Yuk Yok



Hatalar, herhangi bir kodun anormal çalışmasının sonucu olabilecek işlemlerdir. Hata, biz kodu çalıştırana veya kod derlenene kadar yazma sırasında tespit edilemez. Bazı hatalar, kaldırılana kadar kodun yürütülmesini engeller. Bugün, program derlenirken de oluşan bir hatayı da tartışacağız, yani 'hata: 'operator=' için eşleşme yok'. Bu hata şu sebeplerden kaynaklanabilir: stringin iletileceği işaretçiyi geçtiysek, sabit değişkeni değiştirmek vb. hatayı anlayın, çünkü hatanın herhangi bir açıklaması olmadan hatayı gösterir.

Sözdizimi

Bu hata için önceden tanımlanmış bir sözdizimi yoktur çünkü bu, kodun veya çıktının bir parçası değildir, yalnızca yanlış koddan kaynaklanabilecek bir belirsizliktir. Gördüğümüz gibi, aşağıda hatanın nasıl görünebileceğine dair bir örnek verilmiştir.







hata : eşleşme yok için 'Şebeke = '

Örnek # 01:

Bu hata ve bunu çözme yöntemi hakkında bir fikir edinelim. Daha iyi anlamak için, nesneleri kullanarak adları işleve ileteceğimiz bir örnek gerçekleştireceğiz ve ardından bunları görüntüleyecektir. İlk önce iostream başlık dosyasını ekleyeceğiz. Bundan sonra “my_object” adında bir sınıf ilan edeceğiz. Bunun içinde, “F_name” ve “L_name” adında, kişinin ilk adını gösteren “F_name”, “L_name” kişinin soyadını belirten iki dizi değişkeni bildirdik.



Ardından, hem 'F_name' hem de 'L_name' değişkenlerine boş değerler atadığımız 'my_object()' adlı bir genel oluşturucu ilan ettik. Ardından “fn” ve “ln” string tipi değişkenlerini geçtiğimiz bir başka fonksiyon tanımladık. Bunun içinde name_set() yöntemini çağırdık. Ardından, 'show()' ve 'name_set()' olmak üzere iki üye işlevi bildirdik. “show()” fonksiyonu çağrıldığında ad ve soyadları birlikte görüntüler. “set_name()” üye fonksiyonunda ise “fn” ve “ln” string tipindeki iki string değişkenini ikinci kurucuya da ilettik.



Şimdi, my_object sınıfının kopya atama operatörünü kullanarak, 'my_object' türünde bir parametre alıyoruz. Derleyici onu her zaman herhangi bir sınıfın satır içi genel üyesi olarak ilan eder. Bu üyenin içinde, “F_name” ve “L_name” kopyalarını elimizde tuttuğumuz “F_name” ye src.F_name ve “L_name” ye src.L_name atadık. Bu, my_object sınıfının üyelerine iletilir. Şimdi, 'Anna' ve 'smith' karakter dizisini argüman olarak ilettiğimiz 'name1' adlı my_cobject sınıfından bir nesne ilan ettik. Bu, yapıcıyı arayacak ve soyadı ile birlikte ilk adı gösterecektir.





Ondan sonra başka bir “isim2” nesnesi oluşturduk ve o nesneye ayrı ayrı isim atadık. Yapıcıya her iki nesne için değerleri ilettikten sonra, 'nam1' ve 'name2' nesnelerinin adlarını görüntüleyecek olan show() yöntemini çağırdık. Kodun sonunda null değerini döndürdük ve kodumuzu çalıştırdık.

Dahil etmek
sınıf benim_nesnem {
özel :
std :: sicim F_adı, L_adı ;
halka açık :
benim_nesnem ( ) { F_adı = ' ' ; L_adı = ' ' ; }
benim_nesnem ( std :: sicim fn std :: sicim ln ) {
ad_kümesi ( fn, ln ) ;
}
geçersiz göstermek ( ) { std :: cout << 'İsmi ' << F_adı << ' ' << L_adı << '. \n ' ; }
geçersiz ad_kümesi ( std :: sicim fn std :: sicim ln ) { F_adı = fn ; L_adı = ln ; }
benim_nesnem & Şebeke = ( sabit benim_nesnem & kaynak ) {
F_adı = kaynak F_adı ;
L_adı = kaynak L_adı ;
dönüş * Bu ;
}

} ;
int ana ( int argc, karakter ** Argv ) {
nesne_adım1 ( 'Anna' , 'demirci' ) ;
benim_nesnemin adı2 ;
isim2 = ( 'Anna' , 'demirci' ) ;
ad1. göstermek ( ) ;
isim2. göstermek ( ) ;
dönüş 0 ;
}

Kodumuzun çalıştırılmasından sonra 24. satırda yanlış kod yazdığımızı gösteren hatanın tipini gösteren “hata: no match for ‘operator=’” şeklinde bir hatamız var. Şimdi bu hatayı çözmeye çalışacağız.



Bu hatayı çözmek için, değerleri herhangi bir sınıfın yapıcısına iletmenin birden çok yolu vardır. İlk yöntemde “isim1” nesnesini “isim2”ye atayacağız çünkü her iki nesneye de aynı değerleri ilettiğimiz için ayrı ayrı iletmeye gerek kalmıyor. Şimdi kodu çalıştırıyoruz.

int ana ( int argc, karakter ** Argv ) {

nesne_adım1 ( 'Anna' , 'demirci' ) ;
benim_nesnemin adı2 ;
isim2 = isim1 ;
ad1. göstermek ( ) ;
isim2. göstermek ( ) ;

Kodda yukarıda gösterildiği gibi değişiklikler yaptıktan sonra, aşağıdaki snippet'te verilen sonuca sahibiz. Görüntülediğimiz yapılandırıcıya iletilen isim hatasız başarıyla görüntüleniyor.

Bu hatayı çözmenin ikinci yöntemi, her iki nesneye de farklı değerler iletmemiz gerektiği zamandır. Yapıcıya argüman olarak iletilecek değerlerle birlikte sınıf adını kullanacağız. İlk adı “jhone” ve ikinci adı “smith” olarak geçtik. Ardından kodu çalıştırdık.

int ana ( int argc, karakter ** Argv ) {

nesne_adım1 ( 'Anna' , 'demirci' ) ;
benim_nesnemin adı2 ;
isim2 = benim_nesnem ( 'John Smith' ) ;

ad1. göstermek ( ) ;
isim2. göstermek ( ) ;

Yukarıda eklediğimiz kodu çalıştırdıktan sonra aşağıdaki gibi bir çıktımız var. 'name1' nesnesi için 'Anna smith' adını ve ikinci nesne 'name2' için 'Jhone Smith' adını gösterdi. Ancak bu sefer kodumuz hatasız düzgün çalıştı.

Şimdi, kodumuzu başarıyla çalıştırmak için başka bir yöntem deneyeceğiz. Yukarıdaki durumlarda olduğu gibi, atama operatörünü kullanarak nesnelere değer atamaya çalıştık. Ancak bu sefer nesnenin bildirildiği andaki değerleri aktaracağız. Aşağıdaki parçada da görebileceğimiz gibi, “isim1” nesnesinin bildirimi sırasında, “ad2” için aynı adımı tekrarlayarak değerleri nesneye argüman olarak ilettik. Şimdi kodu bir kez daha çalıştırıyoruz.

int ana ( int argc, karakter ** Argv ) {
nesne_adım1 ( 'Anna' , 'demirci' ) ;
benim_nesnemin adı2 ( 'John Smith' ) ;
ad1. göstermek ( ) ;
isim2. göstermek ( ) ;

Bu süre boyunca da kod çalıştırıldıktan sonra herhangi bir hata ile karşılaşmadık yani bu da bizim hata yaşamamızı engelleyecektir.

Çözüm

Sınıflardan erişilen fonksiyonlar üzerinde çalışırken karşılaşabileceğimiz bir hatayı kısaca ele aldık. Ayrıca 'geçerli aşırı yükleme yok' hatasını çözmek için nedenleri ve yöntemleri de inceledik. Çoğunlukla bu hatayı yeni programcılar için anlamak zordur, bu yüzden örnekler uygulayarak ve açıklamalarıyla bu hatadan kurtulmalarını kolaylaştırmaya çalıştık.