C ++ feil ingen levedyktig overbelastet '='

C ++ feil ingen levedyktig overbelastet '='

Feil er operasjonene som kan være et resultat av unormal arbeid av enhver kode. Feilen kan ikke oppdages i skrivende stund før vi har utført koden eller den er samlet. Noen feil forbyr koden å utføre til de er fjernet. I dag vil vi også diskutere en feil som også oppstår når programmet er samlet, det vil si "Feil: ingen match for" operatør = "". Denne feilen kan være forårsaket på grunn av årsaker som: Hvis vi har passert pekeren der strengen skal sendes, modifiserer den konstante variabelen osv. Det er ikke vanskelig å fjerne feilen "ingen levedyktig overbelastet", men hovedoppgaven er å forstå feilen fordi den bare viser feilen uten noen beskrivelse av feilen.

Syntaks

Det er ingen slik forhåndsdefinert syntaks for denne feilen fordi det ikke er en del av koden eller utdata, det er bare en tvetydighet som kan være forårsaket på grunn av feil kode. Som vi ser, er nedenfor et eksempel på hvordan feilen kan se ut.

Feil: Ingen kamp for 'Operator ='

Eksempel # 01:

La oss ha en ide om denne feilen og metoden for å løse dette. For å forstå det bedre, vil vi utføre et eksempel der vi skal sende navnene ved å bruke objekter til funksjonen, og det vil deretter vise dem. Vi vil først inkludere overskriftsfilen iostream. Etter det vil vi erklære en klasse som heter “my_object”. Inne i dette har vi erklært to strengvariabler som heter “F_name og“ l_name ”,“ f_name ”som indikerer fornavnet til personen der" l_name "indikerer etternavnet til personen.

Deretter har vi erklært en offentlig konstruktør som heter “my_object ()” der vi tildelte nullverdier til både variablene “f_name” og “l_name”. Etter det erklærte vi en annen funksjon som vi har bestått strengtypevariablene “FN” og “LN”. Inne i det kalte vi name_set () -metoden. Deretter erklærte vi to medlemsfunksjoner “show ()” og “name_set ()”. Når "show () -funksjonen heter, vil den vise fornavn og etternavn sammen. Mens vi i "set_name ()" medlemsfunksjonen passerte to strengvariabler av strengtype “FN” og “LN” som vi også har gitt til den andre konstruktøren.

Nå, ved hjelp av kopieringsoperatøren av klasse My_Object, tar vi en parameter av typen "my_object". Kompilatoren erklærer det alltid som et offentlig medlem av enhver klasse. Inne i dette medlemmet har vi tildelt SRC.F_name til “f_name” og SRC.L_name til “l_name” som vi har beholdt kopien av “f_name” og “l_name”. Dette sendes til medlemmene i klassen My_Object. Nå har vi erklært et objekt i klassen My_Cobject kalt “Navn1” som vi passerte to strenger “Anna” og “Smith” som et argument. Dette vil ringe konstruktøren og vise fornavnet sammen med etternavnet.

Etter det opprettet vi et annet objekt “Name2” og tildelte deretter navnet til det objektet separat. Etter å ha gitt verdiene til konstruktøren for begge objektene, kalte vi Show () -metoden som deretter vil vise navnene for begge objektene “NAM1” og “Name2”. På slutten av koden returnerte vi nullverdien og utførte koden vår.

inkludere
klasse my_object
privat:
std :: String f_name, l_name;
offentlig:
my_object () f_name = ""; L_name = "";
my_object (std :: string fn, std :: string ln)
name_set (fn, ln);

void show () std :: cout << "The name is " << F_name << " " << L_name << ".\n";
void name_set (std :: string fn, std :: string ln) f_name = fn; L_name = ln;
My_Object & Operator = (const my_object & src)
F_name = src.F_name;
L_name = src.L_name;
retur *dette;

;
int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = ("Anna", "Smith");
Navn1.forestilling();
Navn2.forestilling();
retur 0;

Etter utførelsen av koden vår har vi denne feilen som viser at vi har skrevet feil kode på linje 24 som indikerer hvilken type feil som oppstår "Feil: No Match for 'Operator ='". Nå vil vi prøve å løse denne feilen.

For å løse denne feilen har vi flere måter å overføre verdiene til konstruktøren av enhver klasse. I den første metoden vil vi ganske enkelt tilordne “name1” -objektet til “name2” fordi vi har gitt de samme verdiene til begge objektene, så det er ikke nødvendig å passere dem separat. Nå utfører vi koden.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = name1;
Navn1.forestilling();
Navn2.forestilling();

Etter å ha gjort endringer i koden som vist ovenfor, har vi resultatet gitt i utdraget nedenfor. Vi har vist navnet som er gitt til konstruktøren vises vellykket uten noen feil.

Den andre metoden for å løse denne feilen er når vi må gi de forskjellige verdiene til begge objektene. Vi vil ganske enkelt bruke klassenavnet sammen med verdiene som skal sendes til konstruktøren som et argument. Vi passerte fornavnet “Jhone” og det andre navnet “Smith”. Deretter utførte vi koden.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = my_object (“Jhone”, “Smith”);
Navn1.forestilling();
Navn2.forestilling();

Etter å ha utført den ovennevnte koden, har vi utdataene som vist nedenfor. For objektet “Navn1” viste det navnet “Anna Smith” og for det andre objektet “Name2” viste det “Jhone Smith”. Men denne gangen fungerte koden vår ordentlig uten feil i den.

Nå vil vi prøve en annen metode for å utføre koden vår med hell. Som i de ovennevnte tilfellene prøvde vi å tilordne verdiene til objektene ved å bruke tildelingsoperatøren. Men denne gangen vil vi passere verdiene på deklarasjonen av objektet. Som vi kan se i utdraget nedenfor, på tidspunktet for erklæringen om et objekt “Navn1”, passerte vi verdiene som et argument til objektet som gjentok det samme trinnet for “Name2”. Nå utfører vi koden igjen.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
My_Object Name2 (“Jhone”, “Smith”);
Navn1.forestilling();
Navn2.forestilling();

Etter at koden også er utført for denne tiden, har vi ikke opplevd noen feil, noe som betyr at dette også vil forhindre at vi har noen feil.

Konklusjon

Vi har kort diskutert en feil som vi kan møte mens vi jobber med funksjoner som er tilgjengelig fra klasser. Vi har også studert årsaker og metoder for å løse feilen "ingen levedyktig overbelastet". Stort sett er denne feilen vanskelig å forstå for nye programmerere, så vi prøvde dem å gjøre det enkelt å bli kvitt dette ved å implementere eksempler og også med forklaringen.