Erreur C++ : non viable surchargé '=' :

Erreur C Non Viable Surcharge



Les erreurs sont les opérations qui peuvent résulter du fonctionnement anormal de n'importe quel code. L'erreur ne peut pas être détectée au moment de la rédaction tant que nous n'avons pas exécuté le code ou qu'il n'a pas été compilé. Certaines erreurs empêchent le code de s'exécuter jusqu'à ce qu'elles soient supprimées. Aujourd'hui, nous discuterons également d'une erreur qui se produit également lorsque le programme est compilé, c'est-à-dire « erreur : pas de correspondance pour l'opérateur = ». Cette erreur peut être causée pour des raisons telles que : si nous avons passé le pointeur où la chaîne doit être passée, en modifiant la variable constante, etc. Il n'est pas difficile de supprimer l'erreur 'pas de surcharge viable' mais la tâche principale est de comprendre l'erreur car il montre simplement l'erreur sans aucune description de l'erreur.

Syntaxe

Il n'y a pas de syntaxe prédéfinie pour cette erreur car elle ne fait pas partie du code ou de la sortie, c'est juste une ambiguïté qui peut être causée par un code erroné. Comme nous pouvons le voir, voici un exemple de ce à quoi l'erreur peut ressembler.







Erreur : aucune concordance pour 'opérateur = '

Exemple #01 :

Laissez-nous avoir une idée de cette erreur et de la méthode pour résoudre ce problème. Pour mieux le comprendre, nous allons réaliser un exemple dans lequel nous allons passer les noms à l'aide d'objets à la fonction et elle les affichera ensuite. Nous allons d'abord inclure le fichier d'en-tête iostream. Après cela, nous déclarerons une classe nommée 'my_object'. À l'intérieur de laquelle, nous avons déclaré deux variables de chaîne nommées 'F_name et 'L_name', le 'F_name' qui indique le prénom de la personne où le 'L_name' indique le nom de famille de la personne.



Ensuite, nous avons déclaré un constructeur public nommé 'my_object()' dans lequel nous avons attribué des valeurs nulles aux variables 'F_name' et 'L_name'. Après cela, nous avons déclaré une autre fonction à laquelle nous avons passé les variables de type chaîne « fn » et « ln ». À l'intérieur de cela, nous avons appelé la méthode name_set(). Ensuite, nous avons déclaré deux fonctions membres 'show()' et 'name_set()'. Lorsque la fonction 'show() est appelée, elle affichera les prénoms et les noms ensemble. Alors que, dans la fonction membre 'set_name()', nous avons passé deux variables de chaîne de type chaîne 'fn' et 'ln' que nous avons également passées au deuxième constructeur.



Maintenant, en utilisant l'opérateur d'affectation de copie de la classe my_object, nous prenons un paramètre de type 'my_object'. Le compilateur le déclare toujours en tant que membre public inline de n'importe quelle classe. A l'intérieur de ce membre, nous avons assigné le src.F_name au « F_name » et le src.L_name au « L_name » dont nous avons conservé la copie du « F_name » et du « L_name ». Ceci est passé aux membres de la classe my_object. Maintenant, nous avons déclaré un objet de la classe my_cobject nommé 'name1' auquel nous avons passé deux chaînes 'Anna' et 'smith' comme argument. Cela appellera le constructeur et affichera le prénom avec le nom de famille.





Après cela, nous avons créé un autre objet 'nom2', puis attribué le nom à cet objet séparément. Après avoir passé des valeurs au constructeur pour les deux objets, nous avons appelé la méthode show() qui affichera alors les noms des deux objets « nam1 » et « name2 ». A la fin du code, nous avons renvoyé la valeur nulle et exécuté notre code.

comprendre
classer mon_objet {
privé :
std :: chaîne de caractères Nom_F, nom_L ;
Publique :
mon_objet ( ) { F_nom = ' ' ; L_name = ' ' ; }
mon_objet ( std :: chaîne de caractères fn, std :: chaîne de caractères dans ) {
name_set ( fn, ln ) ;
}
annuler Afficher ( ) { std :: écoute << 'Le nom est ' << F_nom << ' ' << L_name << '. \n ' ; }
annuler name_set ( std :: chaîne de caractères fn, std :: chaîne de caractères dans ) { F_nom = fn ; L_name = dans ; }
mon_objet & opérateur = ( constante mon_objet & src ) {
F_nom = src. F_nom ;
L_name = src. L_name ;
revenir * cette ;
}

} ;
entier principale ( entier argc, carboniser ** argv ) {
nom de mon_objet1 ( 'Anne' , 'forgeron' ) ;
mon_objet nom2 ;
nom2 = ( 'Anne' , 'forgeron' ) ;
nom1. Afficher ( ) ;
nom2. Afficher ( ) ;
revenir 0 ;
}

Après l'exécution de notre code, nous avons cette erreur qui affiche que nous avons écrit le mauvais code à la ligne 24 en indiquant le type d'erreur rencontré 'error: no match for 'operator=''. Maintenant, nous allons essayer de résoudre cette erreur.



Pour résoudre cette erreur, nous avons plusieurs façons de transmettre les valeurs au constructeur de n'importe quelle classe. Dans la première méthode, nous assignerons simplement l'objet 'nom1' au 'nom2' car nous avons passé les mêmes valeurs aux deux objets donc il n'est pas nécessaire de les passer séparément. Maintenant, nous exécutons le code.

entier principale ( entier argc, carboniser ** argv ) {

nom de mon_objet1 ( 'Anne' , 'forgeron' ) ;
mon_objet nom2 ;
nom2 = nom1 ;
nom1. Afficher ( ) ;
nom2. Afficher ( ) ;

Après avoir apporté des modifications au code comme indiqué ci-dessus, nous avons le résultat donné dans l'extrait ci-dessous. Nous avons affiché le nom passé au constructeur est affiché avec succès sans aucune erreur.

La deuxième méthode pour résoudre cette erreur consiste à transmettre les différentes valeurs aux deux objets. Nous utiliserons simplement le nom de la classe avec les valeurs qui doivent être transmises au constructeur en tant qu'argument. Nous avons passé le prénom « jhone » et le deuxième nom « smith ». Ensuite, nous avons exécuté le code.

entier principale ( entier argc, carboniser ** argv ) {

nom de mon_objet1 ( 'Anne' , 'forgeron' ) ;
mon_objet nom2 ;
nom2 = mon_objet ( 'John Smith' ) ;

nom1. Afficher ( ) ;
nom2. Afficher ( ) ;

Après avoir exécuté le code ajouté ci-dessus, nous avons la sortie comme indiqué ci-dessous. Pour l'objet 'name1', il affichait le nom 'Anna smith' et pour le deuxième objet 'name2', il affichait 'Jhone Smith'. Mais cette fois, notre code a fonctionné correctement sans aucune erreur.

Maintenant, nous allons essayer une autre méthode pour exécuter notre code avec succès. Comme dans les cas ci-dessus, nous avons essayé d'affecter les valeurs aux objets à l'aide de l'opérateur d'affectation. Mais cette fois, on passera les valeurs au moment de la déclaration de l'objet. Comme on peut le voir dans l'extrait ci-dessous, lors de la déclaration d'un objet 'nom1', on a passé les valeurs en argument à l'objet en répétant la même étape pour le 'nom2'. Maintenant, nous exécutons à nouveau le code.

entier principale ( entier argc, carboniser ** argv ) {
nom de mon_objet1 ( 'Anne' , 'forgeron' ) ;
mon_objet nom2 ( 'John Smith' ) ;
nom1. Afficher ( ) ;
nom2. Afficher ( ) ;

Une fois le code exécuté pour cette fois également, nous n'avons rencontré aucune erreur, ce qui signifie que cela nous empêchera également d'avoir des erreurs.

Conclusion

Nous avons brièvement discuté d'une erreur que nous pouvons rencontrer lorsque nous travaillons sur des fonctions accessibles à partir de classes. Nous avons également étudié les causes et les méthodes pour résoudre l'erreur 'pas de surcharge viable'. La plupart du temps, cette erreur est difficile à comprendre pour les nouveaux programmeurs, nous avons donc essayé pour eux de s'en débarrasser facilement en implémentant des exemples et également avec son explication.