C++ hiba: Nincs életképes túlterhelt ‘=’:

C Hiba Nincs Eletkepes Tulterhelt



A hibák azok a műveletek, amelyek bármely kód rendellenes működésének következményei lehetnek. A hiba nem észlelhető íráskor, amíg a kódot le nem hajtjuk, vagy le nem fordítjuk. Egyes hibák megtiltják a kód végrehajtását, amíg el nem távolítják őket. Ma egy olyan hibáról is szó lesz, amely a program fordításakor is fellép, ez az „error: no match for ‘operator=’”. Ezt a hibát olyan okok okozhatják, mint: ha átadtuk a mutatót, ahol a karakterláncot át kell adni, a konstans változó módosítása stb. Nem nehéz eltávolítani a „nincs életképes túlterhelés” hibát, de a fő feladat az, hogy megérteni a hibát, mert csak a hibát mutatja a hiba leírása nélkül.

Szintaxis

Ennek a hibának nincs ilyen előre definiált szintaxisa, mert ez nem része a kódnak vagy a kimenetnek, csak egy kétértelműség, amelyet a rossz kód okozhat. Amint látjuk, az alábbiakban egy példa látható arra, hogyan nézhet ki a hiba.







hiba : nem egyezik számára 'operátor = '

01. példa:

Legyen elképzelésünk erről a hibáról és a megoldás módjáról. Hogy jobban megértsük, végrehajtunk egy példát, amelyben a neveket objektumokkal adjuk át a függvénynek, majd a függvény megjeleníti azokat. Először az iostream fejlécfájlt fogjuk tartalmazni. Ezt követően deklarálunk egy „my_object” nevű osztályt. Ezen belül deklaráltunk két „F_name” és „L_name” nevű karakterlánc-változót, az „F_name”-t, amely a személy keresztnevét jelzi, míg az „L_name” a személy vezetéknevét.



Ezután deklaráltunk egy „my_object()” nevű nyilvános konstruktort, amelyben null értékeket rendeltünk az „F_name” és az „L_name” változókhoz. Ezt követően deklaráltunk egy másik függvényt, amelyhez átadtuk az „fn” és „ln” karakterlánc típusú változókat. Ezen belül meghívtuk a name_set() metódust. Ezután két tagfüggvényt deklaráltunk: „show()” és „name_set()”. A „show() függvény meghívásakor a kereszt- és vezetékneveket együtt jeleníti meg. Míg a „set_name()” tagfüggvényben két „fn” és „ln” karakterlánc típusú változót adtunk át, amelyeket szintén átadtunk a második konstruktornak.



Most a my_object osztály másolás-hozzárendelési operátorát használva veszünk egy „my_object” típusú paramétert. A fordító mindig bármely osztály beágyazott nyilvános tagjaként deklarálja. Ezen a tagon belül az src.F_name értéket az „F_name”-hez, az src.L_name-et pedig az „L_name”-hez rendeltük, így megtartottuk az „F_name” és „L_name” másolatát. Ezt adják át a my_object osztály tagjainak. Most deklaráltuk a my_cobject osztály egy „név1” nevű objektumát, amelyhez két karakterláncot „Anna” és „kovács” adtunk argumentumként. Ez felhívja a konstruktort, és megjeleníti a keresztnevet a vezetéknévvel együtt.





Ezt követően létrehoztunk egy másik „név2” objektumot, majd külön hozzárendeltük a nevet ahhoz az objektumhoz. Miután mindkét objektum értékeit átadtuk a konstruktornak, meghívtuk a show() metódust, amely mindkét objektum nevét megjeleníti a „nam1” és a „name2” esetében. A kód végén a null értéket adtuk vissza, és végrehajtottuk a kódunkat.

tartalmazza
osztály my_object {
magán :
std :: húr F_név, L_név ;
nyilvános :
my_object ( ) { F_name = ' ' ; L_name = ' ' ; }
my_object ( std :: húr fn, std :: húr ln ) {
name_set ( fn, ln ) ;
}
üres előadás ( ) { std :: cout << 'A név ' << F_name << ' ' << L_name << '. \n ' ; }
üres name_set ( std :: húr fn, std :: húr ln ) { F_name = fn ; L_name = ln ; }
my_object & operátor = ( const my_object & src ) {
F_name = src. F_name ;
L_name = src. L_name ;
Visszatérés * ez ;
}

} ;
int fő- ( int argc, char ** argv ) {
my_object name1 ( 'Anna' , 'Kovács' ) ;
my_object name2 ;
név2 = ( 'Anna' , 'Kovács' ) ;
név1. előadás ( ) ;
név2. előadás ( ) ;
Visszatérés 0 ;
}

A kódunk végrehajtása után ez a hibaüzenet jelenik meg, amely azt jelzi, hogy rossz kódot írtunk a 24. sorba, jelezve a felmerült hiba típusát „hiba: nincs egyezés az „operátor=” kifejezésre. Most megpróbáljuk megoldani ezt a hibát.



A hiba megoldására többféleképpen is átadhatjuk az értékeket bármely osztály konstruktorának. Az első módszerben egyszerűen hozzárendeljük a „name1” objektumot a „name2”-hez, mivel ugyanazokat az értékeket adtuk át mindkét objektumnak, így nem szükséges külön átadni őket. Most végrehajtjuk a kódot.

int fő- ( int argc, char ** argv ) {

my_object name1 ( 'Anna' , 'Kovács' ) ;
my_object name2 ;
név2 = név1 ;
név1. előadás ( ) ;
név2. előadás ( ) ;

Miután a fent látható módon módosította a kódot, az alábbi részletben látható eredményt kapjuk. Megjelenítettük a konstruktornak átadott név sikeresen, hiba nélkül jelenik meg.

A hiba megoldásának második módja az, amikor mindkét objektumnak különböző értékeket kell átadnunk. Egyszerűen az osztály nevét fogjuk használni azokkal az értékekkel együtt, amelyeket a konstruktornak át kell adni argumentumként. A „jhone” keresztnevet és a „kovács” második nevet adtuk át. Ezután végrehajtottuk a kódot.

int fő- ( int argc, char ** argv ) {

my_object name1 ( 'Anna' , 'Kovács' ) ;
my_object name2 ;
név2 = my_object ( 'John Smith' ) ;

név1. előadás ( ) ;
név2. előadás ( ) ;

A fent hozzáadott kód végrehajtása után megkapjuk az alábbi kimenetet. A „name1” objektumnál az „Anna Smith” nevet, a második „name2” objektumnál pedig a „Jhone Smith” nevet jelenítette meg. De ezúttal a kódunk megfelelően működött, hiba nélkül.

Most megpróbálunk egy másik módszert a kód sikeres végrehajtására. A fenti esetekhez hasonlóan az objektumokhoz a hozzárendelési operátor segítségével próbáltuk hozzárendelni az értékeket. Ezúttal azonban átadjuk az objektum deklarálásakor érvényes értékeket. Amint az alábbi részletben láthatjuk, a „name1” objektum deklarációjakor az értékeket argumentumként adtuk át az objektumnak, megismételve ugyanazt a lépést a „name2”-nél. Most még egyszer végrehajtjuk a kódot.

int fő- ( int argc, char ** argv ) {
my_object name1 ( 'Anna' , 'Kovács' ) ;
my_object name2 ( 'John Smith' ) ;
név1. előadás ( ) ;
név2. előadás ( ) ;

Miután a kód lefutott erre az időre is, nem találkoztunk hibával, ami azt jelenti, hogy ez is megakadályozza, hogy bármilyen hibánk legyen.

Következtetés

Röviden megbeszéltük azt a hibát, amellyel szembesülhetünk, amikor osztályokból elérhető függvényeken dolgozunk. Tanulmányoztuk a „nincs életképes túlterhelés” hiba okát és megoldását. Ez a hiba többnyire nehezen érthető az új programozók számára, ezért igyekeztünk példák implementálásával és magyarázatával is megkönnyíteni ennek megszüntetését.