es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo solucionar el error “El valor del tipo no se puede asignar a una entidad del tipo “?

Estoy desarrollando una matriz bidimensional en c++ utilizando la entrada del usuario de filas y columnas, y quiero asignar memoria para las columnas, pero sigo recibiendo un error que dice:

Un valor de tipo “int” no puede asignarse a una entidad de tipo “int”

Sé lo que significa el error, pero ¿cómo lo soluciono? Es molesto. A continuación se muestra una parte de mi código. También no incluí la sección de impresión, ya que quiero poder transponer la matriz más tarde.

// Variables locales
int filas, columnas;

// Solicitar al usuario que ingrese el número de filas y columnas
std::cout << "Por favor ingrese la cantidad de filas y columnas, respectivamente: " << std::endl;
std::cin >> filas >> columnas;

// Creando una matriz en la memoria heap y dimensionándola según el número de filas
int* arr = new int[filas];

// Asignar los valores de las filas
for (int i = 0; i < filas; i++) { 

    // Creando un nuevo heap para las columnas en arr[i]
    arr[i] = new int[columnas];
}

// Obteniendo los valores de las filas
for (int i = 0; i < filas; i++) {
    // Asignar y obtener los valores de las columnas
    for (int j = 0; j < columnas; j++) {

        // Ingresar los elementos de la matriz
        std::cout << "Por favor ingrese un número: " << std::endl;
        std::cin >> arr[i][j];
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error ocurre porque estás asignando un valor entero a un puntero. El puntero debe contener una dirección de memoria, no un valor entero. Para solucionar esto, debes cambiar la declaración de tu array a un puntero a un puntero, como se muestra a continuación:

    // Creando un array de punteros en la memoria del montón y asignándole el tamaño según el número de filas
    int** arr = new int*[filas]; 
    
    // Asignando los valores de las filas
    for (int i = 0; i < filas; i++) { 
    
        // Creando un nuevo montón para las columnas dentro de arr[i]
        arr[i] = new int[columnas];
    }
    

    Aquí, declaramos arr como un puntero a un puntero de enteros. Asignamos un array de punteros en la primera línea y luego asignamos a cada puntero un array de enteros de asignación dinámica en el bucle.

    Al hacer esto, puedes referenciar cada elemento de tu array bidimensional a través de un puntero a un puntero, usando arr[i][j]. Esto permite la asignación y referencia adecuada de la memoria para tu array.

Comments are closed.