Error ISO prohíbe la comparación entre Pointer e Integer

Error ISO prohíbe la comparación entre Pointer e Integer
Este artículo trata sobre un error que ocurre comúnmente al comparar punteros e enteros. Antes de pasar a nuestro tema, debemos saber qué es ISO. ISO significa Organización de Estándares Internacionales. Esta empresa desarrolla y publica estándares internacionales. Mientras se programan en el lenguaje C ++, a menudo recibimos este error que ISO prohíbe la comparación entre Pointer e Integer. Este error también ocurre en otros idiomas, como el idioma C. La pregunta principal surge por qué ISO no permite comparaciones entre punteros e enteros.

La respuesta es que en el lenguaje C ++, cuando un programador intenta comparar dos tipos de datos diferentes, el sistema lanzará el error de comparación. Entonces, un entero es un tipo de datos diferente y un puntero es una dirección de memoria. Por lo tanto, el compilador dará un error porque ambos son diferentes tipos de datos. Este error no solo ocurre al comparar punteros e enteros, sino que ocurre cada vez que intentamos comparar dos variables de diferentes tipos de datos.

Sintaxis

Es un mensaje de error, por lo que no tiene ninguna sintaxis, pero podemos mostrarle cómo se ve este error:

Error: ISO C ++ prohíbe la comparación entre Pointer e Integer [-fpermissive]

Ejemplo # 01:

Ahora, para comprender el error en profundidad, realizaremos un ejemplo en el que compararemos nuestra variable con un tipo de datos diferente y veremos si el sistema arroja algún error o no. Para ese propósito, hemos declarado una matriz de personajes llamada "X" con una longitud de 5. Hemos impreso nuestros mensajes para la legibilidad del usuario. Ahora, si echamos un vistazo a la línea número 4, veremos que estamos comparando nuestra variable con la palabra 'hola'. El propósito de nuestro código es si los valores de nuestro valor variable y aprobado coinciden. El compilador debe entrar en la condición if. Después de eso, el compilador regresará (0) y saldrá con éxito de nuestro código. Ahora, ejecutemos nuestro código.

#incluir
usando el espacio de nombres STD;
char x [5];
cout x;
if (x == 'hola')

cout<<"Hi How are You";

return (0);

Después de ejecutar nuestro código, recibiremos el siguiente error de nuestro compilador como resultado. Si observamos de cerca el mensaje de error, podemos ver que el compilador ha señalado un error en la línea 7. Esta es la línea donde estábamos tratando de comparar nuestra variable con un valor "hola". El compilador toma cuerdas o personajes en citas dobles como ("hola"). Pero aquí hemos pasado el valor en citas individuales como ('Hola'). Entonces, los tipos de datos no coinciden y el compilador reconoce nuestro valor aprobado como un puntero. Debido a todo eso, el compilador no podrá hacer una comparación entre ellos y lanzará un error que podemos ver en la figura a continuación en color rojo.

Ahora, intentemos resolver el error y ejecutemos con éxito nuestro código. Para ese propósito, en nuestro caso, solo tendremos que cambiar el valor aprobado de 'hola' a "hola" para que el sistema lo reconozca como un personaje. Simplemente cambiaremos las cotizaciones individuales con cotizaciones dobles. Después de eso, ejecutaremos nuestro código.

Después de ejecutar nuestro código, la cifra anterior es cómo se verá nuestra salida. El compilador ha ejecutado con éxito nuestro código e imprimido lo que le pedimos que imprima. Después de eso, nos muestra el mensaje de que el programa terminó con el código de salida 0 porque al fin, devolvimos 0 de nuestra función principal. Entonces, podemos ver que al pasar solo el tipo de datos correcto, hemos resuelto nuestro problema.

Ejemplo # 02:

En el ejemplo anterior, explicamos cómo el compilador arroja un error. Pero no tomamos un entero como nuestra variable. Tomaremos un entero e intentaremos compararlo con el puntero. Para hacerlo, hemos inicializado una matriz "I" con 1 longitud. Hemos declarado otra variable R que es un entero y lo ha pasado el valor 4. Queremos ver si los valores coinciden con el sistema deben devolver 1 y si no son iguales, el sistema devolverá 0. Entonces, ejecutemos nuestro código para ver qué pasa.

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

int i [1];
int r = 4;

si yo != r)

return (0);

demás
retorno (1);


Después de la ejecución de nuestro código, esta es la salida. El sistema nos ha dado el error una vez más. En este caso, está en la línea 10. Si volvemos y miramos nuestro código, veremos que en la línea 10, estamos comparando nuestra matriz con nuestro entero. No hemos especificado qué índice estamos comparando. Entonces, el sistema comparará toda la memoria con nuestro entero. En nuestro código, la memoria será un puntero. El sistema nos dará el error debido a este tipo de datos inconsistente.

Ahora, resolveremos el error. Para hacerlo, simplemente diremos la longitud de nuestra matriz al sistema. Para eso, reemplazaremos el "I" con "I [1]" para que el sistema tome el entero del índice de nuestra matriz y comparará ese entero con nuestro entero declarado personalizado que es "R".

Ahora en la imagen de arriba, podemos ver que nuestro código se ejecuta con éxito y devuelve a nosotros 0. Esto significa que yo [1] no es igual a R. Pero lo principal es que el error se resuelve y el código se compila y ejecuta correctamente. Si los valores fueran los mismos, el sistema habría devuelto 1.

Conclusión

En esta guía, discutimos un error que ocurre mientras escribe código. Explicamos por qué ocurre este error, qué errores comete un programador que condujo a este error y cómo evitar y resolver el error. También realizamos diferentes ejemplos e intentamos obtener este error en diferentes condiciones. Después de eso, resolvimos los errores y señalamos los errores en nuestro código para ayudarlo a comprender mejor.