• Sábado 14 de Diciembre de 2024, 22:49

Autor Tema:  Puntero incompatible  (Leído 1566 veces)

alonsonic

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Puntero incompatible
« en: Sábado 24 de Abril de 2010, 19:29 »
0
Primero q todo buenas es el primer post q hago y enserio q me enamore de esta comunidad desde el primer momento que entre se puede llegar a aprender mucho de esta forma enserio sigan con este increible trabajo por ahora estoy un poco novato pero espero aportar tambien a quien lo necesite.

mi problema es este tengo un codigo bastante sencillo
Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include<string.h>
  5.  
  6. struct album
  7. {
  8.     char nombre[20];
  9.     int fecha;
  10.     int puntuacion;
  11.     char ilustracion[20];
  12.     struct album *next;
  13. };
  14. typedef struct album _album;
  15.  
  16.  
  17. struct artist
  18. {
  19.     char grupo[20];
  20.     char solista[20];
  21.     int validador; //para grupo o solista
  22.     _album *CDS;
  23.     struct artist *next;
  24. };
  25. typedef struct artist _artist;
  26.  
  27.  
  28. _album *crearAlbums()
  29. {
  30.     _album *auxiliar;
  31.     int lanzamiento;
  32.     int puntuacion;
  33.     char nombreAlbum[20];
  34.     auxiliar=malloc(sizeof(_album));
  35.     printf("Nombre del album para el artista");
  36.     scanf("%s",nombreAlbum);    
  37.     strcpy(auxiliar->nombre, nombreAlbum);
  38.     printf("Fecha de lanzamiento del album");
  39.     scanf("%d",&lanzamiento);  
  40.     auxiliar->fecha=lanzamiento;
  41.     printf("Puntuacion del album");
  42.     scanf("%d",&puntuacion);
  43.     auxiliar->puntuacion=puntuacion;    
  44.     auxiliar->next=NULL;
  45.     return auxiliar;
  46. }
  47.  
  48. _artist *crearArtist(char nombreArtista[20], int validar)
  49. {
  50.     _artist *auxiliar;
  51.     auxiliar=malloc(sizeof(_artist));
  52.     if(validar==0) //1 para solista, 0 para grupo
  53.     {
  54.         strcpy(auxiliar->grupo, nombreArtista); strcpy(auxiliar->solista, "");
  55.     }
  56.     else
  57.     {
  58.         strcpy(auxiliar->solista, nombreArtista); strcpy(auxiliar->grupo, "");
  59.     }              
  60.    
  61.     auxiliar->CDS=crearAlbums;   **********ERROR********
  62.     auxiliar->validador=validar; //innecesario estudiar luego comportamiento
  63.     auxiliar->next=NULL;
  64.     return auxiliar;
  65. }
  66.  
  67. _artist *insertarArtistaFinal(char nombreArtista[20],int validar,_artist *apuntador)
  68. {
  69.     _artist *auxiliar=apuntador;
  70.     while (auxiliar->next!=NULL)
  71.     {
  72.         auxiliar=auxiliar->next;
  73.     }
  74.     auxiliar->next=crearArtist(nombreArtista, validar);
  75.     return apuntador;
  76. }
  77.  
  78.  
  79.  

me tira un errorcito que dice q el puntero es incompatible en la linea 60 q seria la marcada con *****
nadie sabe que puede ser porq no puedo seguir mi proyecto si no logro entender porq me da ese error, a mi parecer esta bien porq la funcion devuelve un puntero tipo _album que seria el mismo tipo de puntero del campo CDS de artista, gracias!!!!

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Puntero incompatible
« Respuesta #1 en: Domingo 25 de Abril de 2010, 01:22 »
0
Buenas.

No se si sera esto, pero te faltan los parentesis:
auxiliar->CDS=crearAlbums();

Es raro igual que los malloc no te tiren error, malloc devuelve un puntero null, por lo que te conviene hace un cast, para evitar cualqueir inconveniente:

auxiliar=(_album*)malloc(sizeof(_album));

Espero que eso resuelva tu problema.
Saludos
The sweet smell of a great sorrow lies over the land.


alonsonic

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Puntero incompatible
« Respuesta #2 en: Lunes 26 de Abril de 2010, 17:41 »
0
Gracias!!! epa! si era eso de los parentesis q tonteria, pero lo del malloc no me tira error nunca, porq sera? no entiendo eso de q te arroja un puntero null, sera q el mismo malloc identifica a que tipo de puntero se iguala? nunca le e espesificado eso como escribistes alli, si me explicas un poquito eso miercoles seria feliz, programador en crecimiento jejeje

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Puntero incompatible
« Respuesta #3 en: Lunes 26 de Abril de 2010, 19:26 »
0
Perdon, acabo de leer, y dije culquier cosa  :unsure:

No devuelve un puntero null (ya que no tendrias la direccion que necesitas), sino un puntero void, o sea sin tipo, el c en la mayoria de los casos hace conversiones implicitas en las asignaciones de diferentes tipos, pero conviene hacerlas explicitas en muchos casos por precaucion.
The sweet smell of a great sorrow lies over the land.


alonsonic

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Puntero incompatible
« Respuesta #4 en: Lunes 26 de Abril de 2010, 19:29 »
0
ah ok perfecto ahora si entendi, enserio gracias epa! una tonteria q no me dejaba seguir el proyecto y no encontraba.  :comp: thanks!