C++ viga: pole elujõulist ülekoormatud '=':

C Viga Pole Elujoulist Ulekoormatud



Vead on toimingud, mis võivad olla mis tahes koodi ebanormaalse töö tulemus. Viga ei saa kirjutamise ajal tuvastada enne, kui oleme koodi täitnud või see on kompileeritud. Mõned vead keelavad koodi käivitamise enne, kui need on eemaldatud. Täna käsitleme ka viga, mis ilmneb ka programmi kompileerimisel, see on 'viga: pole vastet 'operaatorile ='. Selle tõrke põhjuseks võivad olla järgmised põhjused: kui oleme edasi andnud kursori stringi edastamise kohta, konstantse muutuja muutmine jne. Vea 'pole elujõuline ülekoormamine' eemaldamine pole keeruline, kuid peamine ülesanne on veast aru, sest see lihtsalt näitab viga ilma vea kirjelduseta.

Süntaks

Selle vea jaoks pole sellist eelmääratletud süntaksit, kuna see ei ole osa koodist ega väljundist, see on lihtsalt ebaselgus, mille võib põhjustada vale kood. Nagu näeme, on allpool näide selle kohta, kuidas viga võib välja näha.







viga : vastet pole jaoks 'operaator = '

Näide # 01:

Anname selle vea ja selle lahendamise viisi kohta idee. Selle paremaks mõistmiseks esitame näite, milles anname objektide abil nimed funktsioonile edasi ja see kuvab need seejärel. Esmalt lisame päisefaili iostream. Pärast seda kuulutame klassi nimega 'minu_objekt'. Mille sees oleme deklareerinud kaks stringi muutujat nimega 'F_name ja 'L_name', 'F_name', mis näitab isiku eesnime, kus 'L_name' tähistab isiku perekonnanime.



Järgmisena oleme deklareerinud avaliku konstruktori nimega 'my_object()', milles määrasime nullväärtused nii muutujatele 'F_name' kui ka 'L_name'. Pärast seda deklareerisime veel ühe funktsiooni, millele oleme edastanud stringitüüpi muutujad “fn” ja “ln”. Selle sees kutsusime meetodi name_set() välja. Seejärel deklareerisime kaks liigefunktsiooni 'show()' ja 'name_set ()'. Funktsiooni 'show() kutsumisel kuvatakse ees- ja perekonnanimed koos. Seevastu liikmefunktsioonis “set_name()” edastasime kaks stringitüüpi “fn” ja “ln” stringimuutujat, mille oleme edastanud ka teisele konstruktorile.



Nüüd, kasutades klassi minu_objekti kopeerimise määramise operaatorit, võtame ühe parameetri tüüpi 'minu_objekt'. Kompilaator deklareerib selle alati mis tahes klassi siseseks avalikuks liikmeks. Selle liikme sees oleme määranud src.F_name 'F_name'-le ja src.L_name 'L_name'-le, et oleme säilitanud 'F_name' ja 'L_name' koopia. See edastatakse klassi my_object liikmetele. Nüüd oleme deklareerinud objekti klassist my_cobject nimega “nimi1”, millele andsime argumendiks kaks stringi “Anna” ja “sepp”. See helistab konstruktorile ja kuvab eesnime koos perekonnanimega.





Pärast seda lõime teise objekti “nimi2” ja määrasime sellele objektile eraldi nime. Pärast mõlema objekti väärtuste edastamist konstruktorile kutsusime meetodi show(), mis kuvab mõlema objekti nimed “nam1” ja “name2”. Koodi lõpus tagastasime nullväärtuse ja käivitasime oma koodi.

sisaldama
klass minu_objekt {
privaatne :
std :: string F_nimi, L_nimi ;
avalik :
minu_objekt ( ) { F_nimi = ' ' ; L_nimi = ' ' ; }
minu_objekt ( std :: string fn, std :: string ln ) {
name_set ( fn, ln ) ;
}
tühine näidata ( ) { std :: cout << 'nimi on' << F_nimi << ' ' << L_nimi << '. \n ' ; }
tühine name_set ( std :: string fn, std :: string ln ) { F_nimi = fn ; L_nimi = ln ; }
minu_objekt & operaator = ( konst minu_objekt & src ) {
F_nimi = src. F_nimi ;
L_nimi = src. L_nimi ;
tagasi * see ;
}

} ;
int peamine ( int argc, char ** argv ) {
minu_objekti nimi1 ( 'Anna' , 'sepp' ) ;
minu_objekti nimi2 ;
nimi2 = ( 'Anna' , 'sepp' ) ;
nimi1. näidata ( ) ;
nimi2. näidata ( ) ;
tagasi 0 ;
}

Pärast koodi täitmist ilmneb see tõrge, mis näitab, et oleme reale 24 kirjutanud vale koodi, mis näitab ilmnenud tõrke tüüpi 'viga: ei vastet operaatorile ='. Nüüd proovime selle vea lahendada.



Selle vea lahendamiseks on meil mitu võimalust väärtuste edastamiseks mis tahes klassi konstruktorile. Esimese meetodi puhul määrame lihtsalt objektile 'name1' objekti 'name2', kuna oleme mõlemale objektile samad väärtused edastanud, seega pole vaja neid eraldi edastada. Nüüd käivitame koodi.

int peamine ( int argc, char ** argv ) {

minu_objekti nimi1 ( 'Anna' , 'sepp' ) ;
minu_objekti nimi2 ;
nimi2 = nimi1 ;
nimi1. näidata ( ) ;
nimi2. näidata ( ) ;

Pärast koodis muudatuste tegemist, nagu ülal näidatud, saame tulemuse, mis on toodud alloleval väljalõigel. Näidasime, et konstruktorile edastatud nimi kuvatakse edukalt ja veatult.

Teine meetod selle vea lahendamiseks on see, kui peame mõlemale objektile edastama erinevad väärtused. Kasutame lihtsalt klassi nime koos väärtustega, mis tuleb konstruktorile argumendina edastada. Me jätsime eesnime 'jhone' ja teise nime 'sepp'. Seejärel käivitasime koodi.

int peamine ( int argc, char ** argv ) {

minu_objekti nimi1 ( 'Anna' , 'sepp' ) ;
minu_objekti nimi2 ;
nimi2 = minu_objekt ( 'John', 'sepp' ) ;

nimi1. näidata ( ) ;
nimi2. näidata ( ) ;

Pärast ülaltoodud koodi täitmist on meil väljund, nagu allpool näidatud. Objekti “name1” puhul kuvas see nime “Anna smith” ja teise objekti “nimi2” puhul “Jhone Smith”. Kuid seekord töötas meie kood korralikult, ilma vigadeta.

Nüüd proovime koodi edukaks täitmiseks teist meetodit. Nagu ülaltoodud juhtudel, proovisime objektidele väärtusi määrata määramisoperaatori abil. Kuid seekord edastame objekti deklareerimise ajal olevad väärtused. Nagu näeme allolevast lõigust, edastasime objekti 'nimi1' deklareerimise ajal väärtused argumendina objektile, korrates sama sammu 'nimi2' jaoks. Nüüd käivitame koodi veel kord.

int peamine ( int argc, char ** argv ) {
minu_objekti nimi1 ( 'Anna' , 'sepp' ) ;
minu_objekti nimi2 ( 'John', 'sepp' ) ;
nimi1. näidata ( ) ;
nimi2. näidata ( ) ;

Pärast seda, kui kood on ka selle aja jooksul käivitatud, pole meil ühtegi tõrget ilmnenud, mis tähendab, et see hoiab ära ka vigade tekkimise.

Järeldus

Oleme lühidalt arutanud viga, millega võime klassidest juurde pääseda funktsioonide kallal töötades. Samuti oleme uurinud põhjuseid ja meetodeid vea 'pole elujõuline ülekoormus' lahendamiseks. Enamasti on see viga uutel programmeerijatel raskesti arusaadav, mistõttu proovisime neil näidete juurutamise ja ka selle selgituse abil sellest lahti saada.