Erreur C ++ Pas de surchargement viable '='

Erreur C ++ Pas de surchargement viable '='

Les erreurs sont les opérations qui peuvent être le résultat du fonctionnement anormal de tout code. L'erreur ne peut pas être détectée au moment de la rédaction du moment où nous avons exécuté le code ou il est compilé. Certaines erreurs interdisent au code d'exécuter jusqu'à ce qu'ils soient supprimés. 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« 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 transmise, 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 elle montre simplement l'erreur sans aucune description de l'erreur.

Syntaxe

Il n'y a pas une telle 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 dû au mauvais code. Comme nous pouvons le voir, ci-dessous est un exemple de ce à quoi l'erreur peut ressembler.

Erreur: aucune correspondance pour 'opérateur ='

Exemple # 01:

Laissez-nous une idée de cette erreur et de la méthode pour résoudre ceci. Pour mieux le comprendre, nous allons effectuer un exemple dans lequel nous allons passer les noms en utilisant des objets à la fonction et il les affichera ensuite. Nous inclurons d'abord le fichier d'en-tête iOStream. Après cela, nous déclarerons une classe nommée «My_Object». À l'intérieur de quoi, 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 deux variables «f_name» et «l_name». Après cela, nous avons déclaré une autre fonction à laquelle nous avons passé les variables de type de chaîne «FN» et «LN». À l'intérieur, nous avons appelé la méthode name_set (). Ensuite, nous avons déclaré deux fonctions de membre «show ()» et «name_set ()». Lorsque la fonction «show () est appelée, elle affichera les prénoms et les noms de famille ensemble. Alors que, dans la fonction de membre "set_name ()", nous avons passé deux variables de chaîne de type de chaîne "fn" et "ln" que nous avons également transmis au deuxième constructeur.

Maintenant, en utilisant l'opérateur d'attribution de copie de la classe my_object, nous prenons un paramètre de type «my_object». Le compilateur le déclare toujours comme un membre public en ligne de toute classe. À l'intérieur de ce membre, nous avons attribué le SRC.F_name au "f_name" et src.L_name au «l_name» que nous avons conservé la copie du «f_name» et «l_name». Ceci est transmis 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 «name2», 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 ensuite les noms des deux objets «Nam1» et «Name2». À la fin du code, nous avons renvoyé la valeur nul et exécuté notre code.

inclure
classe my_object
privé:
std :: string f_name, l_name;
public:
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;
Retour * ceci;

;
int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = ("Anna", "Smith");
nom1.montrer();
nom2.montrer();
retour 0;

Après l'exécution de notre code, nous avons cette erreur qui affiche que nous avons écrit le mauvais code sur la ligne 24 indiquant le type d'erreur qui est rencontré «Erreur: pas de correspondance pour« opératrice = »». 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 allons simplement attribuer l'objet «Name1» au «name2» car nous avons transmis les mêmes valeurs aux deux objets afin qu'il n'y ait pas besoin de les passer séparément. Maintenant, nous exécutons le code.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = name1;
nom1.montrer();
nom2.montrer();

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 transmis au constructeur s'affiche avec succès sans aucune erreur.

La deuxième méthode pour résoudre cette erreur est lorsque nous devons transmettre les différentes valeurs aux deux objets. Nous utiliserons simplement le nom de classe avec les valeurs qui doivent être transmises au constructeur comme argument. Nous avons passé le prénom «Jhone» et le deuxième nom «Smith». Ensuite, nous avons exécuté le code.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
my_object name2;
name2 = my_object («Jhone», «Smith»);
nom1.montrer();
nom2.montrer();

Après avoir exécuté le code ci-dessus, nous avons la sortie comme indiqué ci-dessous. Pour l'objet «Name1», il affiche 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'attribuer les valeurs aux objets en utilisant l'opérateur d'affectation. Mais cette fois, nous passerons les valeurs au moment de la déclaration de l'objet. Comme nous pouvons le voir dans l'extrait ci-dessous, au moment de la déclaration d'un objet «name1», nous avons passé les valeurs comme argument à l'objet répétant la même étape pour le «Name2». Maintenant, nous exécutons à nouveau le code.

int main (int argc, char ** argv)
My_Object Name1 ("Anna", "Smith");
My_Object Name2 («Jhone», «Smith»);
nom1.montrer();
nom2.montrer();

Une fois le code exécuté pour cette période é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 à laquelle nous pouvons faire face tout en travaillant sur des fonctions accessibles à partir des classes. Nous avons également étudié les causes et les méthodes pour résoudre l'erreur «Aucune surcharge viable». La plupart du temps, cette erreur est difficile à comprendre pour les nouveaux programmeurs, nous avons donc essayé pour eux de faciliter la élimination de cela en mettant en œuvre des exemples et également avec son explication.