C++ Conversión no válida de Int* a Int
Este breve tutorial discutirá el mensaje de error "Conversación no válida de int* a int"
. Primero, hagamos un resumen de los punteros en C++.
Preliminares de puntero en C++
Los punteros se utilizan para contener la dirección (un valor hexadecimal) de una variable, y se asignan a la variable de tipo puntero mediante el signo ampersand (&
), también conocido como el operador de dirección precedido del nombre de la variable.
Los punteros se declaran usando el símbolo *
así:
DataType *p;
Podemos asignar la dirección de una variable entera a un puntero entero usando la siguiente declaración:
int* p = &a;
La línea de código anterior asignará la dirección de la variable entera a
al puntero entero p
.
el error de conversión
Cuando a una variable entera se le asigna un valor de dirección hexadecimal de variable en lugar de un valor de tipo entero, se produce el error conversión no válida de int* a int
.
Código de ejemplo:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int p;
p = &a; // invalid conversion error
cout << p;
}
El código anterior generará un error de conversión en la línea 07 ya que a p
se le asigna una dirección de tipo int*
que no se puede almacenar en una variable entera.
Producción :
main.cpp: In function 'int main()': main.cpp:7:7: error: invalid conversion from 'int*' to 'int' [-fpermissive] ptr = &p; //invalid conversion. ^
Resolver el error de conversión
La mayoría de los compiladores no permiten una conversión de tipo de tipo de puntero al tipo de datos simple. Por lo tanto, el problema se puede resolver asegurándose de que el valor del tipo de dirección se asigne a una variable de puntero adecuada.
Código de ejemplo:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* p;
p = &a;
cout << p;
}
El símbolo *
al declarar p
lo convertirá en un puntero a un número entero. Haciéndolo así capaz de almacenar la dirección de una variable entera sin requerir ninguna conversión de tipo.