Error de C++: No Viable Sobrecargado '=':

Error De C No Viable Sobrecargado



Los errores son las operaciones que pueden ser el resultado del funcionamiento anormal de cualquier código. El error no se puede detectar a la hora de escribir hasta que hayamos ejecutado el código o este esté compilado. Algunos errores impiden que el código se ejecute hasta que se eliminen. Hoy, también discutiremos un error que también ocurre cuando se compila el programa, que es 'error: no hay coincidencia para 'operador =''. Este error puede ser causado por razones como: si hemos pasado el puntero donde se va a pasar la cadena, modificando la variable constante, etc. No es difícil eliminar el error 'no viable sobrecargado' pero la tarea principal es entender el error porque solo muestra el error sin ninguna descripción del error.

Sintaxis

No existe tal sintaxis predefinida para este error porque no es parte del código o la salida, es solo una ambigüedad que puede deberse a un código incorrecto. Como podemos ver, a continuación se muestra un ejemplo de cómo puede verse el error.







error : no match por 'operador =

Ejemplo # 01:

Tengamos una idea sobre este error y el método para resolverlo. Para que se entienda mejor, vamos a realizar un ejemplo en el que vamos a pasar los nombres mediante objetos a la función y luego los mostrará. Primero incluiremos el archivo de cabecera iostream. Después de eso, declararemos una clase llamada 'mi_objeto'. Dentro de las cuales, hemos declarado dos variables de cadena denominadas 'F_name y 'L_name', el 'F_name' que indica el nombre de la persona donde el 'L_name' indica el apellido de la persona.



A continuación, hemos declarado un constructor público llamado 'mi_objeto()' en el que asignamos valores nulos a las variables 'F_name' y 'L_name'. Después de eso, declaramos otra función a la que le hemos pasado las variables de tipo cadena 'fn' y 'ln'. Dentro de eso, llamamos al método name_set(). Luego, declaramos dos funciones miembro “show()” y “name_set()”. Cuando se llama a la función 'mostrar (), mostrará los nombres y apellidos juntos. Mientras que, en la función miembro 'set_name()', pasamos dos variables de cadena de tipo de cadena 'fn' y 'ln' que también pasamos al segundo constructor.



Ahora, usando el operador de asignación de copia de la clase mi_objeto, tomamos un parámetro de tipo 'mi_objeto'. El compilador siempre lo declara como miembro público en línea de cualquier clase. Dentro de este miembro, hemos asignado src.F_name al 'F_name' y src.L_name al 'L_name' que hemos retenido la copia de 'F_name' y 'L_name'. Esto se pasa a los miembros de la clase my_object. Ahora, hemos declarado un objeto de la clase my_cobject llamado 'nombre1' al que le pasamos dos cadenas 'Anna' y 'smith' como argumento. Esto llamará al constructor y mostrará el nombre junto con el apellido.





Después de eso, creamos otro objeto 'nombre2' y luego le asignamos el nombre a ese objeto por separado. Después de pasar valores al constructor para ambos objetos, llamamos al método show() que luego mostrará los nombres de ambos objetos 'nam1' y 'name2'. Al final del código, devolvimos el valor nulo y ejecutamos nuestro código.

incluir
clase mi_objeto {
privado :
estándar :: cuerda F_nombre, L_nombre ;
público :
mi_objeto ( ) { F_nombre = ' ' ; L_nombre = ' ' ; }
mi_objeto ( estándar :: cuerda fn, estándar :: cuerda en ) {
conjunto_de_nombres ( fn, en ) ;
    }
    vacío mostrar ( ) { estándar :: cout << 'El nombre es ' << F_nombre << ' ' << L_nombre << '. \norte ' ; }
    vacío conjunto_de_nombres ( estándar :: cuerda fn, estándar :: cuerda en ) { F_nombre = fn ; L_nombre = en ; }
mi_objeto & operador = ( constante mi_objeto & origen ) {
F_nombre = origen F_nombre ;
L_nombre = origen L_nombre ;
    devolver * este ;
}
 
} ;
En t principal ( En t argc, carbonizarse ** argv ) {
mi_objeto nombre1 ( 'Ana' , 'Herrero' ) ;
mi_objeto nombre2 ;
nombre2 = ( 'Ana' , 'Herrero' ) ;
nombre1. mostrar ( ) ;
nombre2. mostrar ( ) ;
    devolver 0 ;
}

Después de la ejecución de nuestro código, tenemos este error que muestra que hemos escrito el código incorrecto en la línea 24 que indica el tipo de error que se encuentra 'error: no hay coincidencia para 'operador =''. Ahora, intentaremos resolver este error.



Para resolver este error, tenemos varias formas de pasar los valores al constructor de cualquier clase. En el primer método, simplemente asignaremos el objeto 'nombre1' al 'nombre2' porque hemos pasado los mismos valores a ambos objetos, por lo que no es necesario pasarlos por separado. Ahora ejecutamos el código.

En t principal ( En t argc, carbonizarse ** argv ) {

mi_objeto nombre1 ( 'Ana' , 'Herrero' ) ;
mi_objeto nombre2 ;
nombre2 = nombre1 ;
nombre1. mostrar ( ) ;
nombre2. mostrar ( ) ;

Después de realizar cambios en el código como se muestra arriba, tenemos el resultado que se muestra en el fragmento a continuación. Hemos mostrado que el nombre pasado al constructor se muestra correctamente sin ningún error.

El segundo método para resolver este error es cuando tenemos que pasar los diferentes valores a ambos objetos. Simplemente usaremos el nombre de la clase junto con los valores que se pasarán al constructor como argumento. Pasamos el primer nombre “jhone” y el segundo nombre “smith”. Luego, ejecutamos el código.

En t principal ( En t argc, carbonizarse ** argv ) {

mi_objeto nombre1 ( 'Ana' , 'Herrero' ) ;
mi_objeto nombre2 ;
nombre2 = mi_objeto ( 'John Smith' ) ;

nombre1. mostrar ( ) ;
nombre2. mostrar ( ) ;

Después de ejecutar el código agregado anteriormente, tenemos el resultado como se muestra a continuación. Para el objeto 'nombre1', mostró el nombre 'Anna smith' y para el segundo objeto 'nombre2' mostró 'Jhone Smith'. Pero esta vez nuestro código funcionó correctamente sin ningún error.

Ahora, probaremos otro método para ejecutar nuestro código con éxito. Como en los casos anteriores, intentamos asignar los valores a los objetos usando el operador de asignación. Pero esta vez, pasaremos los valores en el momento de la declaración del objeto. Como podemos ver en el fragmento a continuación, en el momento de la declaración de un objeto 'nombre1', pasamos los valores como argumento al objeto repitiendo el mismo paso para el 'nombre2'. Ahora, ejecutamos el código una vez más.

En t principal ( En t argc, carbonizarse ** argv ) {
mi_objeto nombre1 ( 'Ana' , 'Herrero' ) ;
mi_objeto nombre2 ( 'John Smith' ) ;
nombre1. mostrar ( ) ;
nombre2. mostrar ( ) ;

Después de ejecutar el código por esta vez también, no hemos encontrado ningún error, lo que significa que esto también evitará que tengamos errores.

Conclusión

Hemos discutido brevemente un error que podemos encontrar al trabajar en funciones a las que se accede desde las clases. También hemos estudiado las causas y métodos para resolver el error “no viable sobrecargado”. En su mayoría, este error es difícil de entender para los nuevos programadores, por lo que intentamos que les fuera fácil deshacerse de esto implementando ejemplos y también con su explicación.