Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/05/2015, 12:13
Avatar de anggiebs
anggiebs
 
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Punteros y Arrays dinámicos

Hola,tengo problemas con un ejercicio que consiste en que tengo una lista formada por un contador(int) y un array (que dentro tiene estructuras)de cantidad N en principio.
Cuando el array se llene,tengo que crear un array dinámico nuevo con la capacidad N aumentada (en mi ejercicio he llamado max a esta variable).
Una vez he creado este array dinámico,copio los elementos del array viejo en este array nuevo y elimino el array viejo.
Finalmente,tengo que hacer que la lista apunte a este nuevo array dinámico.
Código C++:
Ver original
  1. //Declaración de tipos:
  2. typedef struct {
  3.    int codigo;
  4.    std::string nombre;
  5.    double valor;
  6. } tRegistro;
  7.  
  8. typedef tRegistro *tRegPtr;
  9.  
  10. typedef struct {
  11.    tRegPtr registros;
  12.    int cont;
  13. } tLista;
  14.  
  15.  
  16. //Función en la que tengo los errores:
  17. bool insertar(tLista &lista, tRegistro registro, int &max) {
  18.     bool aniadido = false;
  19.     max = N;
  20.     if (lista.cont == max) {//Si la lista está llena,se incrementará el tamaño del array en otras N posiciones.
  21.         max += N;
  22.         //Creo un nuevo array dinámico con la nueva cantidad de max.
  23.         tRegPtr *registrosAux = new tRegPtr[max];
  24.  
  25.         //Copio los elementos del array anterior al nuevo array dinámico.
  26.         for(int i = 0; i < lista.cont; i++){
  27.             registrosAux[i] = lista.registros[i];//AQUÍ ERROR 1
  28.         }
  29.         //Destruimos el array viejo de la lista porque ya se llenó.
  30.          delete [] lista.registros;
  31.  
  32.          //Hacer que el puntero lista.registros apunte al nuevo array.
  33.          lista.registros = registrosAux;//AQUÍ ERROR 2
  34.     }
  35.     //Siempre añade un nuevo elemento solo que comprueba si tiene la lista llena antes para ver si incrementa o no esta cantidad.
  36.     lista.registros[lista.cont] = registro;
  37.     lista.cont++;
  38.     aniadido = true;
  39.     return aniadido;
  40. }
Tengo dos errores y en ambos me dice que pertenecen a error C2440: '='
ERROR 1: no se puede realizar la conversión de 'tRegistro' a 'tRegPtr'
ERROR 2:no se puede realizar la conversión de 'tRegPtr *' a 'tRegPtr'

PD:Si ya de paso me pueden explicar o dar algún tip para entender bien esto de los punteros,me ayudaría muchísimo porque no termino de entenderlo :(