C++ kļūda: nav dzīvotspējīgas pārslodzes “=”:

C Kluda Nav Dzivotspejigas Parslodzes



Kļūdas ir darbības, kas var būt jebkura koda neparastas darbības rezultāts. Kļūdu nevar atklāt rakstīšanas laikā, kamēr neesam izpildījuši kodu vai nav apkopoti. Dažas kļūdas neļauj izpildīt kodu, līdz tās tiek noņemtas. Šodien mēs apspriedīsim arī kļūdu, kas rodas arī programmas kompilēšanas laikā, proti, 'kļūda: nav atbilstības 'operatoram ='. Šo kļūdu var izraisīt tādi iemesli kā: ja esam nodevuši rādītāju, kur jānodod virkne, mainot konstantu mainīgo utt. Nav grūti noņemt kļūdu “nav dzīvotspējīga pārslodze”, taču galvenais uzdevums ir saprast kļūdu, jo tā tikai parāda kļūdu bez kļūdas apraksta.

Sintakse

Šai kļūdai nav iepriekš noteiktas sintakses, jo tā nav koda daļa vai izvade, tā ir tikai neskaidrība, ko var izraisīt nepareizs kods. Kā redzam, zemāk ir piemērs tam, kā var izskatīties kļūda.







kļūda : nav sakritības priekš 'operators = '

01. piemērs:

Ļaujiet mums gūt priekšstatu par šo kļūdu un tās novēršanas metodi. Lai to labāk izprastu, mēs izpildīsim piemēru, kurā mēs nodosim funkcijai nosaukumus, izmantojot objektus, un tā pēc tam tos parādīs. Vispirms mēs iekļausim galvenes failu iostream. Pēc tam mēs deklarēsim klasi ar nosaukumu “my_object”. Kurā mēs esam deklarējuši divus virknes mainīgos ar nosaukumu “F_name un “L_name”, “F_name”, kas norāda personas vārdu, bet “L_name” norāda uz personas uzvārdu.



Tālāk mēs esam deklarējuši publisku konstruktoru ar nosaukumu “my_object()”, kurā gan mainīgajiem “F_name”, gan “L_name” piešķīrām nulles vērtības. Pēc tam mēs deklarējām vēl vienu funkciju, kurai esam nodevuši virknes tipa mainīgos “fn” un “ln”. Tajā mēs izsaucām metodi name_set (). Pēc tam mēs deklarējām divas dalībnieku funkcijas “show ()” un “name_set ()”. Kad tiek izsaukta funkcija “show(), tā kopā parādīs vārdus un uzvārdus. Savukārt dalībnieka funkcijā “set_name()” mēs nodevām divus virknes mainīgos ar virknes tipu “fn” un “ln”, kurus esam nodevuši arī otrajam konstruktoram.



Tagad, izmantojot klases my_object kopijas piešķiršanas operatoru, mēs ņemam vienu parametru, kura tips ir “my_object”. Kompilators vienmēr to deklarē kā jebkuras klases iekļautu publisku dalībnieku. Šajā loceklī mēs esam piešķīruši src.F_name “F_name” un src.L_name “L_name”, un esam saglabājuši “F_name” un “L_name” kopijas. Tas tiek nodots klases my_object dalībniekiem. Tagad mēs esam deklarējuši klases my_cobject objektu ar nosaukumu “name1”, kuram kā argumentu nodevām divas virknes “Anna” un “Smith”. Tas izsauks konstruktoru un parādīs vārdu kopā ar uzvārdu.





Pēc tam mēs izveidojām citu objektu “name2” un pēc tam piešķīrām nosaukumu šim objektam atsevišķi. Pēc abu objektu vērtību nosūtīšanas konstruktoram mēs izsaucām metodi show(), kas pēc tam parādīs abu objektu nosaukumus “nam1” un “name2”. Koda beigās mēs atgriezām nulles vērtību un izpildījām savu kodu.

ietver
klasē mans_objekts {
Privāts :
std :: virkne F_name, L_name ;
publiski :
mans_objekts ( ) { F_nosaukums = ' ' ; L_nosaukums = ' ' ; }
mans_objekts ( std :: virkne fn, std :: virkne ln ) {
name_set ( fn, ln ) ;
}
nederīgs parādīt ( ) { std :: cout << 'Vārds ir' << F_nosaukums << ' ' << L_nosaukums << '. \n ' ; }
nederīgs name_set ( std :: virkne fn, std :: virkne ln ) { F_nosaukums = fn ; L_nosaukums = ln ; }
mans_objekts & operators = ( konst mans_objekts & src ) {
F_nosaukums = src. F_nosaukums ;
L_nosaukums = src. L_nosaukums ;
atgriezties * šis ;
}

} ;
starpt galvenais ( starpt argc, char ** argv ) {
mana_objekta nosaukums1 ( 'Anna' , 'kalējs' ) ;
mana_objekta nosaukums2 ;
vārds2 = ( 'Anna' , 'kalējs' ) ;
vārds1. parādīt ( ) ;
vārds2. parādīt ( ) ;
atgriezties 0 ;
}

Pēc mūsu koda izpildes tiek parādīta šī kļūda, kas parāda, ka esam ierakstījuši nepareizu kodu 24. rindiņā, norādot kļūdas veidu, ar kuru sastopas “kļūda: nav atbilstības “operators=”. Tagad mēs mēģināsim novērst šo kļūdu.



Lai atrisinātu šo kļūdu, mums ir vairāki veidi, kā nodot vērtības jebkuras klases konstruktoram. Pirmajā metodē mēs vienkārši piešķirsim objektu “name1” objektam “name2”, jo abiem objektiem esam nodevuši vienas un tās pašas vērtības, tāpēc nav nepieciešams tās nodot atsevišķi. Tagad mēs izpildām kodu.

starpt galvenais ( starpt argc, char ** argv ) {

mana_objekta nosaukums1 ( 'Anna' , 'kalējs' ) ;
mana_objekta nosaukums2 ;
vārds2 = vārds1 ;
vārds1. parādīt ( ) ;
vārds2. parādīt ( ) ;

Pēc koda izmaiņu veikšanas, kā parādīts iepriekš, rezultāts ir norādīts tālāk esošajā fragmentā. Mēs esam parādījuši, ka konstruktoram nodotais nosaukums tiek parādīts veiksmīgi bez kļūdām.

Otrā metode šīs kļūdas novēršanai ir tad, kad mums ir jānodod dažādas vērtības abiem objektiem. Mēs vienkārši izmantosim klases nosaukumu kopā ar vērtībām, kas jānodod konstruktoram kā argumentu. Mēs izturējām pirmo vārdu “jhone” un otro vārdu “smith”. Pēc tam mēs izpildījām kodu.

starpt galvenais ( starpt argc, char ** argv ) {

mana_objekta nosaukums1 ( 'Anna' , 'kalējs' ) ;
mana_objekta nosaukums2 ;
vārds2 = mans_objekts ( 'Džons', 'Smits' ) ;

vārds1. parādīt ( ) ;
vārds2. parādīt ( ) ;

Pēc iepriekš pievienotā koda izpildes mums ir izvade, kā parādīts zemāk. Objektam “name1” tika parādīts nosaukums “Anna Smith”, bet otrajam objektam “name2” tika parādīts “Jhone Smith”. Bet šoreiz mūsu kods darbojās pareizi, bez kļūdām.

Tagad mēs izmēģināsim citu metodi, lai veiksmīgi izpildītu mūsu kodu. Tāpat kā iepriekš minētajos gadījumos, mēs mēģinājām objektiem piešķirt vērtības, izmantojot piešķiršanas operatoru. Taču šoreiz mēs nodosim vērtības objekta deklarēšanas brīdī. Kā redzams tālāk esošajā fragmentā, objekta “nosaukums1” deklarēšanas laikā mēs nodevām vērtības kā argumentu objektam, atkārtojot to pašu darbību ar “name2”. Tagad mēs vēlreiz izpildām kodu.

starpt galvenais ( starpt argc, char ** argv ) {
mana_objekta nosaukums1 ( 'Anna' , 'kalējs' ) ;
mana_objekta nosaukums2 ( 'Džons', 'Smits' ) ;
vārds1. parādīt ( ) ;
vārds2. parādīt ( ) ;

Pēc tam, kad kods ir izpildīts arī šajā laikā, mēs neesam saskārušies ar kļūdu, kas nozīmē, ka tas arī neļaus mums pieļaut kļūdas.

Secinājums

Mēs esam īsi apsprieduši kļūdu, ar kuru mēs varam saskarties, strādājot pie funkcijām, kurām var piekļūt no klasēm. Mēs esam arī pētījuši cēloņus un metodes, kā novērst kļūdu “nav dzīvotspējīgas pārslodzes”. Pārsvarā šī kļūda ir grūti saprotama jaunajiem programmētājiem, tāpēc mēs centāmies viņiem atvieglot to novēršanu, ieviešot piemērus un arī ar tās skaidrojumu.