Error 'Cout es ambiguo' en C++

Error Cout Es Ambiguo En C



Este artículo se ocupa de los errores ambiguos de cout en el lenguaje de programación C++. La situación ambigua aparece cuando el compilador no puede determinar los métodos u operadores que se utilizarán en diferentes tareas. A veces, usamos la misma función de parámetro con el mismo espacio de nombres y luego se define cout en ambos casos. Cuando ejecutamos el programa, el compilador genera el error ambiguo cout porque el compilador no entiende qué significado muestra este código. La ambigüedad de cout surge cuando existe un conflicto entre los espacios de nombres definidos o múltiples declaraciones de funciones dentro del programa.

Ejemplo 1:

Este es un ejemplo de un error ambiguo de cout que ocurre principalmente en la programación en C++. Aquí veremos cómo el compilador genera errores ambiguos en cout cuando usamos múltiples espacios de nombres. El fragmento de código de este ejemplo se menciona a continuación:







#incluir

espacio de nombres computadora portátil {

    vacío mostrar ( ) {

enfermedad de transmisión sexual :: corte << 'este es el espacio de nombres de la computadora portátil' << enfermedad de transmisión sexual :: fin ;

    }

}

espacio de nombres móvil {

    vacío mostrar ( ) {


enfermedad de transmisión sexual :: corte << 'este es el espacio de nombres móvil' << enfermedad de transmisión sexual :: fin ;

    }

}

En t principal ( ) {

    usando espacio de nombres computadora portátil ;
    usando espacio de nombres móvil ;

mostrar ( ) ;
   
    devolver 0 ;


}

Aquí tomamos un programa con dos espacios de nombres que se definen según nuestra necesidad. Queremos mostrar las cadenas en la pantalla. El resultado de este código se adjunta a continuación:





Tras la ejecución del código, se genera el error sobre la situación ambigua de cout. El error se genera porque cuando el compilador lee el código, no obtiene una entrada clara del usuario. Usamos múltiples declaraciones de espacios de nombres en nuestro código. En todo el código, utilizamos el método 'mostrar' únicamente para mostrar el resultado en la pantalla. El compilador no tiene idea de qué método de visualización está relacionado con qué espacio de nombres. Necesitamos hacer que el código sea simple y claro para que el compilador comprenda fácilmente los pasos sin que el código sea ambiguo.





La solución a este error es llamar al método con un espacio de nombres relacionado en la función principal para que el compilador lo comprenda mejor. Especificamos claramente qué método de espacio de nombres queremos llamar en nuestra parte de ejecución principal.

#incluir

espacio de nombres computadora portátil {

    vacío mostrar ( ) {


enfermedad de transmisión sexual :: corte << 'este es el espacio de nombres de la computadora portátil' << enfermedad de transmisión sexual :: fin ;

    }

}

espacio de nombres móvil {

    vacío mostrar ( ) {

enfermedad de transmisión sexual :: corte << 'este es el espacio de nombres móvil' << enfermedad de transmisión sexual :: fin ;

    }

}

En t principal ( ) {

    usando espacio de nombres computadora portátil ;
    usando espacio de nombres móvil ;
computadora portátil :: mostrar ( ) ;
    devolver 0 ;


}

Aquí, podemos simplemente vincular el método display() con el espacio de nombres 'laptop' en la función principal como se ve en la captura de pantalla anterior. Ahora, ejecuta el programa. El resultado se muestra en la ventana de la consola.



Ejemplo 2:

Este escenario está relacionado con el error ambiguo cout en C++. El compilador muestra un error cuando no comprende el flujo de ejecución. El fragmento de código de este ejemplo se adjunta a continuación:

#incluir

espacio de nombres lenguaje de clan {

    vacío imprimir ( En t i ) {

enfermedad de transmisión sexual :: corte << 'Espacio de nombres del lenguaje C: ' << i << enfermedad de transmisión sexual :: fin ;

    }

}

espacio de nombres Java {

    vacío imprimir ( En t j ) {

enfermedad de transmisión sexual :: corte << 'Espacio de nombres del lenguaje Java: ' << j << enfermedad de transmisión sexual :: fin ;

    }

}

usando espacio de nombres lenguaje de clan ;

usando espacio de nombres Java ;

En t principal ( ) {

imprimir ( 5 ) ;
    devolver 0 ;


}

En este código, definimos todos los encabezados de biblioteca requeridos. Creamos dos espacios de nombres para diferentes propósitos. En el espacio de nombres 'Clanguage', definimos un método de 'impresión' que toma el valor entero del usuario. En la función “imprimir”, queremos mostrar el valor que el usuario pasó en la pantalla de la consola. Mostramos el resultado requerido usando la secuencia 'cout' en nuestro código. Después de eso, definimos otro espacio de nombres cuyo nombre es 'Java'.

En este espacio de nombres 'Java', usamos el método 'imprimir' nuevamente para mostrar el valor que el usuario pasa usando 'cout'. Llamamos a ambos espacios de nombres para usarlos en nuestra función principal para obtener el resultado deseado en la ventana de la consola en C++. En la función 'principal', llamamos a la función sobrecargada 'print()' para mostrar el valor pasado en la pantalla de la consola.

Haga clic en la opción 'ejecutar' del menú principal y seleccione la opción 'compilar y ejecutar'. El error de ambigüedad ocurre en la ejecución de este código. La captura de pantalla del error se adjunta de la siguiente manera:

Este error indica que el compilador está confundido acerca de la función print() sobrecargada que se llama. Este error está en la línea 19, 'imprimir (5)'. El compilador está confundido acerca del espacio de nombres al que pertenece esta función sobrecargada. Los principiantes siempre quedan atrapados en este tipo de errores la mayor parte del tiempo.

Resolvamos este error que en la actualidad no es complejo. Los errores ambiguos se resuelven fácilmente. Debemos especificar el espacio de nombres junto con la función sobrecargada en la función 'principal' para la visibilidad y comprensión del compilador. Al igual que en este programa, agregamos este 'java::print(5)' en nuestro código existente como se menciona a continuación:

#incluir

espacio de nombres lenguaje de clan {

    vacío imprimir ( En t i ) {

enfermedad de transmisión sexual :: corte << 'Espacio de nombres del lenguaje C: ' << i << enfermedad de transmisión sexual :: fin ;

    }

}

espacio de nombres Java {

    vacío imprimir ( En t j ) {

enfermedad de transmisión sexual :: corte << 'Espacio de nombres del lenguaje Java: ' << j << enfermedad de transmisión sexual :: fin ;

    }

}

usando espacio de nombres lenguaje de clan ;

usando espacio de nombres Java ;

En t principal ( ) {

Java :: imprimir ( 5 ) ;
    devolver 0 ;


}

Ahora, el programa se ejecuta perfectamente sin ningún error ambiguo de cout y muestra el resultado en la pantalla de la consola. El resultado de este programa se adjunta a continuación:

Ejemplo 3:

Este es el último y último ejemplo relacionado con un error que se genera debido a un problema ambiguo. El compilador no puede obtener el resultado correcto. El fragmento de código de este ejemplo se adjunta a continuación para una mejor comprensión del usuario:

Aquí, definimos las bibliotecas requeridas. Después de eso, definimos un espacio de nombres que contiene la clase en la que queremos mostrar la cadena en la ventana de la consola. Llamamos a este espacio de nombres definido en la función 'principal' con la variable 'c'. Después de eso, llamamos al método print() usando un objeto de espacio de nombres. Mostramos la cadena nuevamente en la pantalla de la consola después de la llamada al método. La salida debe ser ambas cadenas y se muestran en la pantalla de la consola. Cuando ejecutamos este código, el error ocurre como se muestra a continuación:

#incluir

usando espacio de nombres enfermedad de transmisión sexual ;

espacio de nombres mi espacio de nombres {

    clase corte {
        público :
            vacío imprimir ( ) {


                corte << 'Cout personalizado' << enfermedad de transmisión sexual :: fin ;

            }

        } ;

}

En t principal ( ) {

mi espacio de nombres :: corte C ;
C. imprimir ( ) ;


    corte << '¡Hola Mundo!' << enfermedad de transmisión sexual :: fin ;

    devolver 0 ;

}

El compilador no seleccionó la declaración cout que muestra los datos en la pantalla de la consola. El compilador no puede entender el espacio de nombres que pertenece a la declaración cout y genera un error. La solución a este error es agregar un objeto de espacio de nombres con una declaración cout para facilitar la lectura y comprensión del compilador. Agregue 'std::' junto a la declaración cout y ejecute el código. El siguiente resultado se muestra en la pantalla de la consola:

Conclusión

Aquí podemos decir que mostrar una salida en la pantalla de la consola también genera un error que no es un error de sintaxis ni un error lógico. La mayoría de las veces, el usuario escribe un buen código, pero no es comprensible para el compilador. El compilador es ambiguo acerca de la entrada. Por lo tanto, aclare cada paso del código con el espacio de nombres y la sintaxis adecuados para evitar errores en el lenguaje de programación C++. Los pasos necesarios para resolver este problema son el uso de calificadores explícitos, la prevención de conflictos de espacios de nombres y la garantía de que las funciones u objetos previstos identifiquen los pasos necesarios para resolver este problema.