C++-virhe: Ei käyttökelpoista ylikuormitettua '=':

C Virhe Ei Kayttokelpoista Ylikuormitettua



Virheet ovat toimintoja, jotka voivat johtua minkä tahansa koodin epänormaalista toiminnasta. Virhettä ei voida havaita kirjoitushetkellä ennen kuin olemme suorittaneet koodin tai se on käännetty. Jotkut virheet estävät koodin suorittamisen, kunnes ne poistetaan. Tänään keskustelemme myös virheestä, joka ilmenee myös ohjelmaa käännettäessä, eli 'error: no match for 'operator=''. Tämä virhe voi johtua seuraavista syistä: jos olemme ohittaneet osoittimen, jossa merkkijono välitetään, vakiomuuttujan muuttaminen jne. Ei ole vaikeaa poistaa 'ei käyttökelpoista ylikuormitusta' -virhettä, mutta päätehtävä on ymmärtää virheen, koska se vain näyttää virheen ilman virheen kuvausta.

Syntaksi

Tälle virheelle ei ole sellaista ennalta määritettyä syntaksia, koska se ei ole osa koodia tai tuloste, se on vain epäselvyys, joka voi johtua väärästä koodista. Kuten näemme, alla on esimerkki siitä, miltä virhe voi näyttää.







virhe : ei osumia varten 'operaattori = '

Esimerkki # 01:

Kerro meille tästä virheestä ja menetelmästä sen ratkaisemiseksi. Ymmärtääksemme sitä paremmin, teemme esimerkin, jossa aiomme välittää nimet objekteja käyttäen funktiolle ja se näyttää ne sitten. Sisällytämme ensin otsikkotiedoston iostream. Sen jälkeen julistamme luokan nimeltä 'my_object'. Sen sisällä olemme ilmoittaneet kaksi merkkijonomuuttujaa nimeltä 'F_name ja 'L_name', 'F_name', joka ilmaisee henkilön etunimeä, kun 'L_name' tarkoittaa henkilön sukunimeä.



Seuraavaksi olemme ilmoittaneet julkisen rakentajan nimeltä 'my_object()', jossa olemme antaneet nolla-arvot sekä muuttujille 'F_name' että 'L_name'. Sen jälkeen ilmoitimme toisen funktion, jolle olemme välittäneet merkkijonotyyppiset muuttujat “fn” ja “ln”. Sen sisällä kutsuimme name_set()-metodia. Sitten julistimme kaksi jäsenfunktiota 'show()' ja 'name_set()'. Kun 'show()-funktiota kutsutaan, se näyttää etu- ja sukunimet yhdessä. Sen sijaan 'set_name()' -jäsenfunktiossa välitimme kaksi merkkijonomuuttujaa, joiden merkkijonotyyppi on 'fn' ja 'ln', jotka olemme myös välittäneet toiselle rakentajalle.



Otamme nyt yhden 'my_object'-tyypin parametrin käyttämällä luokan my_object kopiomääritysoperaattoria. Kääntäjä ilmoittaa sen aina minkä tahansa luokan julkiseksi jäseneksi. Tämän jäsenen sisällä olemme määrittäneet src.F_name:n 'F_name':lle ja src.L_name:n 'L_name':lle, että olemme säilyttäneet kopion 'F_name'- ja 'L_name'-elementeistä. Tämä välitetään luokan my_object jäsenille. Nyt olemme ilmoittaneet luokan my_cobject objektin nimeltä 'nimi1', jolle välitimme kaksi merkkijonoa 'Anna' ja 'smith' argumenttina. Tämä kutsuu rakentajaa ja näyttää etunimen sukunimen kanssa.





Tämän jälkeen loimme toisen objektin 'nimi2' ja määritimme sitten nimen tälle objektille erikseen. Kun molempien objektien arvot oli toimitettu rakentajalle, kutsuimme show()-metodia, joka näyttää molempien objektien nimet 'nam1' ja 'nimi2'. Koodin lopussa palautimme nolla-arvon ja suoritimme koodimme.

sisältää
luokkaa my_object {
yksityinen :
std :: merkkijono F_nimi, L_nimi ;
julkinen :
my_object ( ) { F_nimi = ' ' ; L_nimi = ' ' ; }
my_object ( std :: merkkijono fn, std :: merkkijono ln ) {
name_set ( fn, ln ) ;
}
mitätön näytä ( ) { std :: cout << 'Nimi on ' << F_nimi << ' ' << L_nimi << '. \n ' ; }
mitätön name_set ( std :: merkkijono fn, std :: merkkijono ln ) { F_nimi = fn ; L_nimi = ln ; }
my_object & operaattori = ( konst my_object & src ) {
F_nimi = src. F_nimi ;
L_nimi = src. L_nimi ;
palata * Tämä ;
}

} ;
int pää ( int argc, hiiltyä ** argv ) {
minun_objektin nimi1 ( 'Anna' , 'seppä' ) ;
minun_objektin nimi2 ;
nimi2 = ( 'Anna' , 'seppä' ) ;
nimi1. näytä ( ) ;
nimi2. näytä ( ) ;
palata 0 ;
}

Koodimme suorittamisen jälkeen meillä on tämä virhe, joka näyttää, että olemme kirjoittaneet väärän koodin riville 24 osoittaen havaitun virhetyypin 'virhe: ei vastaa 'operaattori=''. Nyt yritämme ratkaista tämän virheen.



Tämän virheen ratkaisemiseksi meillä on useita tapoja välittää arvot minkä tahansa luokan rakentajalle. Ensimmäisessä menetelmässä yksinkertaisesti määritämme 'nimi1'-objektin 'nimi2':lle, koska olemme välittäneet samat arvot molemmille objekteille, joten niitä ei tarvitse välittää erikseen. Nyt suoritamme koodin.

int pää ( int argc, hiiltyä ** argv ) {

minun_objektin nimi1 ( 'Anna' , 'seppä' ) ;
minun_objektin nimi2 ;
nimi2 = nimi1 ;
nimi1. näytä ( ) ;
nimi2. näytä ( ) ;

Kun olet tehnyt muutoksia koodiin yllä kuvatulla tavalla, meillä on alla olevassa katkelmassa annettu tulos. Olemme näyttäneet, että rakentajalle välitetty nimi näytetään onnistuneesti ilman virheitä.

Toinen tapa ratkaista tämä virhe on, kun meidän on välitettävä eri arvot molemmille objekteille. Käytämme yksinkertaisesti luokan nimeä yhdessä rakentajalle välitettävien arvojen kanssa argumenttina. Välitimme etunimen 'jhone' ja toisen nimen 'smith'. Sitten suoritimme koodin.

int pää ( int argc, hiiltyä ** argv ) {

minun_objektin nimi1 ( 'Anna' , 'seppä' ) ;
minun_objektin nimi2 ;
nimi2 = my_object ( 'John', 'Smith' ) ;

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

Kun olet suorittanut yllä lisätyn koodin, meillä on alla näkyvä tulos. Objektille 'name1' se näytti nimen 'Anna smith' ja toiselle objektille 'name2' se näytti 'Jhone Smith'. Mutta tällä kertaa koodimme toimi oikein ilman virheitä.

Nyt yritämme toista tapaa suorittaa koodimme onnistuneesti. Kuten yllä olevissa tapauksissa, yritimme määrittää arvot kohteille määritysoperaattorilla. Mutta tällä kertaa välitämme arvot objektin ilmoittamishetkellä. Kuten alla olevasta katkelmasta nähdään, välitimme arvot objektin 'nimi1' ilmoituksen yhteydessä argumenttina objektille toistaen saman vaiheen 'nimi2':lle. Nyt suoritamme koodin uudelleen.

int pää ( int argc, hiiltyä ** argv ) {
minun_objektin nimi1 ( 'Anna' , 'seppä' ) ;
minun_objektin nimi2 ( 'John', 'Smith' ) ;
nimi1. näytä ( ) ;
nimi2. näytä ( ) ;

Sen jälkeen kun koodi on suoritettu myös tämän ajan, emme ole havainneet virhettä, mikä tarkoittaa, että tämä estää myös virheitä.

Johtopäätös

Olemme keskustelleet lyhyesti virheestä, jonka saatamme kohdata työskennellessämme luokista avattujen funktioiden parissa. Olemme myös tutkineet syitä ja menetelmiä 'ei elinvoimainen ylikuormitus' -virheen ratkaisemiseksi. Useimmiten tämä virhe on vaikea ymmärtää uusille ohjelmoijille, joten yritimme tehdä siitä helppo päästä eroon toteuttamalla esimerkkejä ja myös sen selityksiä.