Error de C++: cap sobrecàrrega viable '=':

Error De C Cap Sobrecarrega Viable



Els errors són les operacions que poden ser el resultat del funcionament anormal de qualsevol codi. L'error no es pot detectar en el moment d'escriure fins que no hem executat el codi o es compila. Alguns errors impedeixen que el codi s'executi fins que s'eliminin. Avui també parlarem d'un error que també es produeix quan es compila el programa, és a dir, 'error: no coincideix amb 'operador=''. Aquest error pot ser causat per motius com: si hem passat el punter on s'ha de passar la cadena, modificació de la variable constant, etc. No és difícil eliminar l'error 'no viable overloaded' però la tasca principal és entendre l'error perquè només mostra l'error sense cap descripció de l'error.

Sintaxi

No hi ha aquesta sintaxi predefinida per a aquest error perquè no forma part del codi o de la sortida, és només una ambigüitat que pot ser causada per un codi incorrecte. Com podem veure, a continuació es mostra un exemple de com pot ser l'error.







error : no matx per 'operador =

Exemple # 01:

Fem una idea d'aquest error i del mètode per resoldre'l. Per entendre-ho millor, realitzarem un exemple en què passarem els noms mitjançant objectes a la funció i després els mostrarà. Primer inclourem el fitxer de capçalera iostream. Després d'això, declararem una classe anomenada 'el meu_objecte'. Dins de la qual, hem declarat dues variables de cadena anomenades “F_name i “L_name”, la “F_name” que indica el nom de la persona on la “L_name” indica el cognom de la persona.



A continuació, hem declarat un constructor públic anomenat 'my_object()' en el qual hem assignat valors nuls a les variables 'F_name' i 'L_name'. Després d'això, vam declarar una altra funció a la qual hem passat les variables de tipus cadena 'fn' i 'ln'. Dins d'això, hem anomenat el mètode name_set(). Aleshores, vam declarar dues funcions membre 'show()' i 'name_set()'. Quan es crida la funció 'show()', mostrarà els noms i cognoms junts. Mentre que, a la funció membre 'set_name()', hem passat dues variables de cadena de tipus 'fn' i 'ln' que també hem passat al segon constructor.



Ara, utilitzant l'operador d'assignació de còpia de la classe my_object, prenem un paràmetre del tipus 'my_object'. El compilador sempre el declara com a membre públic en línia de qualsevol classe. Dins d'aquest membre, hem assignat el src.F_name al “F_name” i src.L_name al “L_name” que hem conservat la còpia del “F_name” i “L_name”. Això es passa als membres de la classe my_object. Ara, hem declarat un objecte de la classe my_cobject anomenat 'nom1' al qual hem passat dues cadenes 'Anna' i 'smith' com a argument. Això cridarà al constructor i mostrarà el primer nom juntament amb el cognom.





Després d'això, vam crear un altre objecte 'nom2' i després vam assignar el nom a aquest objecte per separat. Després de passar valors al constructor per als dos objectes, vam cridar el mètode show() que mostrarà els noms dels dos objectes 'nam1' i 'name2'. Al final del codi, vam retornar el valor nul i vam executar el nostre codi.

incloure
classe el meu_objecte {
privat :
std :: corda Nom_F, nom_L ;
públic :
el meu_objecte ( ) { F_nom = ' ' ; L_nom = ' ' ; }
el meu_objecte ( std :: corda fn, std :: corda ln ) {
conjunt_noms ( fn, ln ) ;
}
buit espectacle ( ) { std :: cout << 'El nom és' << F_nom << ' ' << L_nom << '. \n ' ; }
buit conjunt_noms ( std :: corda fn, std :: corda ln ) { F_nom = fn ; L_nom = ln ; }
el meu_objecte & operador = ( const el meu_objecte & src ) {
F_nom = src. F_nom ;
L_nom = src. L_nom ;
tornar * això ;
}

} ;
int principal ( int argc, char ** argv ) {
nom_meu_objecte1 ( 'Anna' , 'ferrer' ) ;
nom_meu_objecte2 ;
nom 2 = ( 'Anna' , 'ferrer' ) ;
nom 1. espectacle ( ) ;
nom 2. espectacle ( ) ;
tornar 0 ;
}

Després de l'execució del nostre codi, tenim aquest error que mostra que hem escrit el codi incorrecte a la línia 24 indicant el tipus d'error que es troba 'error: no coincideix amb 'operador=''. Ara, intentarem resoldre aquest error.



Per resoldre aquest error, tenim diverses maneres de passar els valors al constructor de qualsevol classe. En el primer mètode, simplement assignarem l'objecte 'nom1' al 'nom2' perquè hem passat els mateixos valors als dos objectes, de manera que no cal passar-los per separat. Ara executem el codi.

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

nom_meu_objecte1 ( 'Anna' , 'ferrer' ) ;
nom_meu_objecte2 ;
nom 2 = nom 1 ;
nom 1. espectacle ( ) ;
nom 2. espectacle ( ) ;

Després de fer canvis al codi tal com es mostra a dalt, tenim el resultat que es mostra al fragment següent. Hem mostrat que el nom passat al constructor es mostra correctament sense cap error.

El segon mètode per resoldre aquest error és quan hem de passar els diferents valors als dos objectes. Simplement utilitzarem el nom de la classe juntament amb els valors que s'han de passar al constructor com a argument. Vam passar el primer nom 'jhone' i el segon nom 'ferrer'. A continuació, vam executar el codi.

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

nom_meu_objecte1 ( 'Anna' , 'ferrer' ) ;
nom_meu_objecte2 ;
nom 2 = el meu_objecte ( 'john', 'ferrer' ) ;

nom 1. espectacle ( ) ;
nom 2. espectacle ( ) ;

Després d'executar el codi afegit anteriorment, tenim la sortida tal com es mostra a continuació. Per a l'objecte 'name1', mostrava el nom 'Anna smith' i per al segon objecte 'name2' mostrava 'Jhone Smith'. Però aquesta vegada el nostre codi va funcionar correctament sense cap error.

Ara, provarem un altre mètode per executar el nostre codi amb èxit. Com en els casos anteriors, hem intentat assignar els valors als objectes mitjançant l'operador d'assignació. Però aquesta vegada, passarem els valors en el moment de la declaració de l'objecte. Com podem veure al fragment següent, en el moment de la declaració d'un objecte 'nom1', vam passar els valors com a argument a l'objecte repetint el mateix pas per al 'nom2'. Ara, executem el codi una vegada més.

int principal ( int argc, char ** argv ) {
nom_meu_objecte1 ( 'Anna' , 'ferrer' ) ;
nom_meu_objecte2 ( 'john', 'ferrer' ) ;
nom 1. espectacle ( ) ;
nom 2. espectacle ( ) ;

Després d'executar el codi també durant aquest temps, no hem trobat cap error, la qual cosa significa que això també ens evitarà que tinguem cap error.

Conclusió

Hem comentat breument un error que podem trobar mentre treballem en funcions a les quals s'accedeix des de les classes. També hem estudiat les causes i els mètodes per resoldre l'error 'no hi ha sobrecàrrega viable'. Majoritàriament, aquest error és difícil d'entendre per als programadors nous, per la qual cosa hem intentat que sigui fàcil desfer-se'n mitjançant la implementació d'exemples i també amb la seva explicació.