Eroare C++: Nicio supraîncărcare viabilă „=”:

Eroare C Nicio Supraincarcare Viabila



Erorile sunt operațiunile care pot fi rezultatul funcționării anormale a oricărui cod. Eroarea nu poate fi detectată în momentul scrierii până când nu executăm codul sau nu este compilat. Unele erori interzic executarea codului până când sunt eliminate. Astăzi, vom discuta și despre o eroare care apare și atunci când programul este compilat, și anume „eroare: nicio potrivire pentru ‘operator=’”. Această eroare poate fi cauzată din motive precum: dacă am depășit indicatorul unde urmează să fie trecut șirul, modificarea variabilei constante etc. Nu este dificil să eliminați eroarea „no viable overloaded” dar sarcina principală este să înțelegeți eroarea deoarece arată doar eroarea fără nicio descriere a erorii.

Sintaxă

Nu există o astfel de sintaxă predefinită pentru această eroare, deoarece nu este o parte a codului sau a ieșirii, este doar o ambiguitate care poate fi cauzată din cauza codului greșit. După cum putem vedea, mai jos este un exemplu despre cum poate arăta eroarea.







eroare : nu se potrivesc pentru 'operator =

Exemplul # 01:

Să ne facem o idee despre această eroare și despre metoda de rezolvare. Pentru a o înțelege mai bine, vom realiza un exemplu în care vom trece numele folosind obiecte la funcție și apoi le va afișa. Mai întâi vom include fișierul antet iostream. După aceea, vom declara o clasă numită „my_object”. În interiorul cărora, am declarat două variabile șir numite „F_name și „L_name”, „F_name” care indică prenumele persoanei unde „L_name” indică numele de familie al persoanei.



Apoi, am declarat un constructor public numit „my_object()” în care am atribuit valori nule ambelor variabile „F_name” și „L_name”. După aceea, am declarat o altă funcție căreia i-am trecut variabilele de tip șir „fn” și „ln”. În interiorul acesteia, am numit metoda name_set(). Apoi, am declarat două funcții membre „show()” și „name_set()”. Când funcția „show() este apelată, aceasta va afișa prenumele și numele de familie împreună. În timp ce, în funcția membru „set_name()”, am trecut două variabile șir de tip șir „fn” și „ln” pe care le-am trecut și celui de-al doilea constructor.



Acum, folosind operatorul de atribuire de copiere al clasei my_object, luăm un parametru de tipul „my_object”. Compilatorul îl declară întotdeauna ca membru public inline al oricărei clase. În interiorul acestui membru, am atribuit src.F_name „F_name” și src.L_name „L_name” pe care le-am păstrat copia „F_name” și „L_name”. Acesta este transmis membrilor clasei my_object. Acum, am declarat un obiect din clasa my_cobject numit „nume1” căruia i-am trecut două șiruri „Anna” și „smith” ca argument. Aceasta va apela constructorul și va afișa prenumele împreună cu numele de familie.





După aceea, am creat un alt obiect „name2” și apoi i-am atribuit numele acelui obiect separat. După transmiterea valorilor către constructor pentru ambele obiecte, am apelat metoda show() care va afișa apoi numele ambelor obiecte „nam1” și „name2”. La sfârșitul codului, am returnat valoarea nulă și am executat codul nostru.

include
clasă obiectul_meu {
privat :
std :: şir F_nume, L_nume ;
public :
obiectul_meu ( ) { F_nume = ' ' ; L_nume = ' ' ; }
obiectul_meu ( std :: şir fn, std :: şir ln ) {
set_nume ( fn, ln ) ;
}
gol spectacol ( ) { std :: cout << 'Numele este ' << F_nume << ' ' << L_nume << '. \n ' ; }
gol set_nume ( std :: şir fn, std :: şir ln ) { F_nume = fn ; L_nume = ln ; }
obiectul_meu & operator = ( const obiectul_meu & src ) {
F_nume = src. F_nume ;
L_nume = src. L_nume ;
întoarcere * acest ;
}

} ;
int principal ( int argc, char ** argv ) {
numele_obiectului meu1 ( 'Anna' , 'fierar' ) ;
numele_obiectului meu2 ;
nume2 = ( 'Anna' , 'fierar' ) ;
nume1. spectacol ( ) ;
nume2. spectacol ( ) ;
întoarcere 0 ;
}

După executarea codului nostru, avem această eroare care afișează că am scris codul greșit pe linia 24 indicând tipul de eroare care este întâlnită „eroare: nicio potrivire pentru ‘operator=’”. Acum, vom încerca să rezolvăm această eroare.



Pentru a rezolva această eroare, avem mai multe moduri de a transmite valorile către constructorul oricărei clase. În prima metodă, vom atribui pur și simplu obiectul „nume1” „nume2” deoarece am transmis aceleași valori ambelor obiecte, astfel încât nu este nevoie să le transmitem separat. Acum executăm codul.

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

numele_obiectului meu1 ( 'Anna' , 'fierar' ) ;
numele_obiectului meu2 ;
nume2 = nume1 ;
nume1. spectacol ( ) ;
nume2. spectacol ( ) ;

După ce am făcut modificări la cod, așa cum se arată mai sus, avem rezultatul dat în fragmentul de mai jos. Am arătat că numele transmis constructorului este afișat cu succes fără nicio eroare.

A doua metodă de a rezolva această eroare este atunci când trebuie să transmitem diferitele valori ambelor obiecte. Vom folosi pur și simplu numele clasei împreună cu valorile care urmează să fie transmise constructorului ca argument. Am trecut prenumele „jhone” și al doilea nume „smith”. Apoi, am executat codul.

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

numele_obiectului meu1 ( 'Anna' , 'fierar' ) ;
numele_obiectului meu2 ;
nume2 = obiectul_meu ( 'John Smith' ) ;

nume1. spectacol ( ) ;
nume2. spectacol ( ) ;

După executarea codului adăugat mai sus, avem rezultatul așa cum se arată mai jos. Pentru obiectul „nume1”, a afișat numele „Anna smith”, iar pentru al doilea obiect „nume2” a afișat „Jhone Smith”. Dar de data aceasta codul nostru a funcționat corect, fără erori în el.

Acum, vom încerca o altă metodă pentru a executa cu succes codul nostru. Ca și în cazurile de mai sus, am încercat să atribuim valorile obiectelor folosind operatorul de atribuire. Dar de această dată, vom trece valorile în momentul declarării obiectului. După cum putem vedea în fragmentul de mai jos, la momentul declarării unui obiect „nume1”, am transmis valorile ca argument obiectului repetând același pas pentru „nume2”. Acum, executăm codul încă o dată.

int principal ( int argc, char ** argv ) {
numele_obiectului meu1 ( 'Anna' , 'fierar' ) ;
numele_obiectului meu2 ( 'John Smith' ) ;
nume1. spectacol ( ) ;
nume2. spectacol ( ) ;

După ce codul este executat și pentru această dată, nu am întâlnit nicio eroare, ceea ce înseamnă că acest lucru ne va împiedica și să avem erori.

Concluzie

Am discutat pe scurt despre o eroare cu care ne putem confrunta în timp ce lucrăm la funcții care sunt accesate din clase. De asemenea, am studiat cauzele și metodele de rezolvare a erorii „no viable overloaded”. În mare parte, această eroare este greu de înțeles pentru programatorii noi, așa că am încercat ca ei să scape mai ușor de aceasta prin implementarea exemplelor și, de asemenea, cu explicația ei.