Programación General > C/C++
Puntero incompatible
(1/1)
alonsonic:
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 --- #include <stdio.h>#include <stdlib.h>#include<string.h> struct album{ char nombre[20]; int fecha; int puntuacion; char ilustracion[20]; struct album *next;};typedef struct album _album; struct artist{ char grupo[20]; char solista[20]; int validador; //para grupo o solista _album *CDS; struct artist *next;};typedef struct artist _artist; _album *crearAlbums(){ _album *auxiliar; int lanzamiento; int puntuacion; char nombreAlbum[20]; auxiliar=malloc(sizeof(_album)); printf("Nombre del album para el artista"); scanf("%s",nombreAlbum); strcpy(auxiliar->nombre, nombreAlbum); printf("Fecha de lanzamiento del album"); scanf("%d",&lanzamiento); auxiliar->fecha=lanzamiento; printf("Puntuacion del album"); scanf("%d",&puntuacion); auxiliar->puntuacion=puntuacion; auxiliar->next=NULL; return auxiliar;} _artist *crearArtist(char nombreArtista[20], int validar){ _artist *auxiliar; auxiliar=malloc(sizeof(_artist)); if(validar==0) //1 para solista, 0 para grupo { strcpy(auxiliar->grupo, nombreArtista); strcpy(auxiliar->solista, ""); } else { strcpy(auxiliar->solista, nombreArtista); strcpy(auxiliar->grupo, ""); } auxiliar->CDS=crearAlbums; **********ERROR******** auxiliar->validador=validar; //innecesario estudiar luego comportamiento auxiliar->next=NULL; return auxiliar;} _artist *insertarArtistaFinal(char nombreArtista[20],int validar,_artist *apuntador){ _artist *auxiliar=apuntador; while (auxiliar->next!=NULL) { auxiliar=auxiliar->next; } auxiliar->next=crearArtist(nombreArtista, validar); return apuntador;}
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:
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
alonsonic:
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:
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.
alonsonic:
ah ok perfecto ahora si entendi, enserio gracias epa! una tonteria q no me dejaba seguir el proyecto y no encontraba. :comp: thanks!
Navegación
Ir a la versión completa