Erreur « Cout est ambigu » en C++

Erreur Cout Est Ambigu En C



Cet article concerne les erreurs ambiguës dans le langage de programmation C++. La situation ambiguë apparaît lorsque le compilateur ne peut pas déterminer les méthodes ou les opérateurs à utiliser sur différentes tâches. Parfois, nous utilisons la même fonction paramètre avec le même espace de noms, puis cout est défini dans les deux cas. Lorsque nous exécutons le programme, le compilateur génère l'erreur ambiguë cout car le compilateur ne comprend pas la signification de ce code. L'ambiguïté cout survient lorsqu'un conflit existe entre les espaces de noms définis ou plusieurs déclarations de fonctions à l'intérieur du programme.

Exemple 1:

Ceci est un exemple d'erreur ambiguë qui se produit principalement dans la programmation C++. Ici, nous verrons comment le compilateur génère les erreurs ambiguës sur cout lorsque nous utilisons plusieurs espaces de noms. L'extrait de code de cet exemple est mentionné dans ce qui suit :







#include

espace de noms ordinateur portable {

vide afficher ( ) {

norme :: cout << 'c'est un espace de noms pour ordinateur portable' << norme :: fin ;

}

}

espace de noms mobile {

vide afficher ( ) {


norme :: cout << 'c'est un espace de noms mobile' << norme :: fin ;

}

}

int principal ( ) {

en utilisant espace de noms ordinateur portable ;
en utilisant espace de noms mobile ;

afficher ( ) ;

retour 0 ;


}

Ici, nous avons pris un programme avec deux espaces de noms définis en fonction de nos besoins. Nous voulons afficher les chaînes à l'écran. La sortie de ce code est jointe ci-dessous :





Lors de l'exécution du code, une erreur est générée concernant une situation ambiguë. L'erreur est générée car lorsque le compilateur lit le code, le compilateur ne reçoit pas d'entrée claire de la part de l'utilisateur. Nous avons utilisé plusieurs déclarations d'espace de noms dans notre code. Dans tout le code, nous avons utilisé la méthode « display » uniquement pour afficher la sortie à l'écran. Le compilateur n'a aucune idée de quelle méthode d'affichage est liée à quel espace de noms. Nous devons rendre le code simple et clair afin que le compilateur comprenne facilement les étapes sans rendre le code ambigu.





La solution à cette erreur consiste à appeler la méthode avec un espace de noms associé dans la fonction principale pour que le compilateur comprenne mieux. Nous spécifions clairement quelle méthode d'espace de noms nous voulons appeler dans notre partie d'exécution principale.

#include

espace de noms ordinateur portable {

vide afficher ( ) {


norme :: cout << 'c'est un espace de noms pour ordinateur portable' << norme :: fin ;

}

}

espace de noms mobile {

vide afficher ( ) {

norme :: cout << 'c'est un espace de noms mobile' << norme :: fin ;

}

}

int principal ( ) {

en utilisant espace de noms ordinateur portable ;
en utilisant espace de noms mobile ;
ordinateur portable :: afficher ( ) ;
retour 0 ;


}

Ici, nous pouvons simplement lier la méthode display() à l'espace de noms « laptop » dans la fonction principale, comme le montre la capture d'écran précédente. Maintenant, exécutez le programme. La sortie est affichée sur la fenêtre de la console.



Exemple 2 :

Ce scénario est lié à l’erreur ambiguë cout en C++. Le compilateur affiche une erreur lorsqu'il ne comprend pas le flux d'exécution. L'extrait de code de cet exemple est joint ci-dessous :

#include

espace de noms Clangue {

vide imprimer ( int je ) {

norme :: cout << 'Espace de noms du langage C : ' << je << norme :: fin ;

}

}

espace de noms Java {

vide imprimer ( int j ) {

norme :: cout << 'Espace de noms du langage Java : ' << j << norme :: fin ;

}

}

en utilisant espace de noms Clangue ;

en utilisant espace de noms Java ;

int principal ( ) {

imprimer ( 5 ) ;
retour 0 ;


}

Dans ce code, nous définissons tous les en-têtes de bibliothèque requis. Nous créons deux espaces de noms à des fins différentes. Dans l'espace de noms « Clangage », nous définissons une méthode « print » qui prend la valeur entière de l'utilisateur. Dans la fonction « imprimer », nous souhaitons afficher la valeur que l'utilisateur a transmise sur l'écran de la console. Nous affichons la sortie requise en utilisant le flux « cout » dans notre code. Après cela, nous définissons un autre espace de noms dont le nom est « Java ».

Dans cet espace de noms « Java », nous utilisons à nouveau la méthode « print » pour afficher la valeur que l'utilisateur transmet à l'aide de « cout ». Nous appelons les deux espaces de noms pour les utiliser dans notre fonction principale afin d'obtenir le résultat souhaité sur la fenêtre de console en C++. Dans la fonction « main », nous appelons la fonction surchargée « print() » pour afficher la valeur transmise sur l'écran de la console.

Cliquez sur l'option « exécuter » dans le menu principal et sélectionnez l'option « compiler et exécuter ». L'erreur d'ambiguïté se produit lors de l'exécution de ce code. La capture d'écran de l'erreur est jointe comme suit :

Cette erreur indique que le compilateur ne comprend pas la fonction print() surchargée qui est appelée. Cette erreur se trouve à la ligne 19, 'print (5)'. Le compilateur ne sait pas à quel espace de noms appartient cette fonction surchargée. Les débutants sont toujours coincés dans ce type d’erreurs la plupart du temps.

Résolvons cette erreur qui n’est pas complexe en réalité. Les erreurs ambiguës sont facilement résolues. Nous devons spécifier l'espace de noms avec la fonction surchargée dans la fonction « principale » pour la visibilité et la compréhension du compilateur. Comme dans ce programme, nous ajoutons ce « java::print(5) » dans notre code existant comme mentionné dans ce qui suit :

#include

espace de noms Clangue {

vide imprimer ( int je ) {

norme :: cout << 'Espace de noms du langage C : ' << je << norme :: fin ;

}

}

espace de noms Java {

vide imprimer ( int j ) {

norme :: cout << 'Espace de noms du langage Java : ' << j << norme :: fin ;

}

}

en utilisant espace de noms Clangue ;

en utilisant espace de noms Java ;

int principal ( ) {

Java :: imprimer ( 5 ) ;
retour 0 ;


}

Désormais, le programme s'exécute parfaitement sans aucune erreur ambiguë et affiche la sortie sur l'écran de la console. Le résultat de ce programme est joint ci-dessous :

Exemple 3 :

Il s'agit du dernier et dernier exemple lié à une erreur générée en raison d'un problème ambigu. Le compilateur ne peut pas obtenir le résultat correct. L’extrait de code de cet exemple est joint ci-dessous pour une meilleure compréhension de l’utilisateur :

Ici, nous définissons les bibliothèques requises. Après cela, nous définissons un espace de noms qui contient la classe dans laquelle nous souhaitons afficher la chaîne sur la fenêtre de la console. Nous appelons cet espace de noms défini dans la fonction « main » avec la variable « c ». Après cela, nous appelons la méthode print() en utilisant un objet espace de noms. Nous affichons à nouveau la chaîne sur l'écran de la console après l'appel de la méthode. La sortie doit être constituée de deux chaînes et est affichée sur l’écran de la console. Lorsque nous exécutons ce code, l'erreur se produit comme indiqué ci-dessous :

#include

en utilisant espace de noms norme ;

espace de noms monespace de noms {

classe cout {
publique :
vide imprimer ( ) {


cout << 'Couture personnalisée' << norme :: fin ;

}

} ;

}

int principal ( ) {

monespace de noms :: cout c ;
c. imprimer ( ) ;


cout << 'Bonjour le monde!' << norme :: fin ;

retour 0 ;

}

Le compilateur n'a pas sélectionné l'instruction cout qui affiche les données sur l'écran de la console. Le compilateur ne peut pas comprendre l'espace de noms appartenant à l'instruction cout et génère une erreur. La solution à cette erreur consiste à ajouter un objet d'espace de noms avec une instruction cout pour la lisibilité et la compréhension du compilateur. Ajoutez « std :: » le long de l'instruction cout et exécutez le code. La sortie suivante s'affiche sur l'écran de la console :

Conclusion

Ici, on peut dire que l'affichage d'une sortie sur l'écran de la console génère également une erreur qui n'est pas une erreur de syntaxe ni une erreur logique. La plupart du temps, l’utilisateur écrit un bon sens du code, mais ce n’est pas compréhensible pour le compilateur. Le compilateur est ambigu sur l'entrée. Clarifiez donc chaque étape du code avec un espace de noms et une syntaxe appropriés pour éviter les erreurs dans le langage de programmation C++. Les étapes impliquées dans la résolution de ce problème consistent à utiliser des qualificatifs explicites, à éviter les conflits d'espaces de noms et à garantir que les fonctions ou objets prévus ont identifié les étapes impliquées dans la résolution de ce problème.