Autor
|
Tema: Problema con struct dentro de libreria (Leído 9,710 veces)
|
dkmarley
Desconectado
Mensajes: 18
|
Buenas Tardes!! Bueno os explico mi caso... xD estoy utilizando un puntero hacia una struct en una funcion dentro de una libreria hecha unicamente para la practica que toy haciendo... el caso es que cada vez que uso el puntero me sale un error... error: invalid use of undefined type ‘struct perfiljugador’ error: dereferencing pointer to incomplete type He estado viendo que puede ser porque la libreria y el main no se encuentra o algo asi... uso netbeans i la verdad que nose donde tendria que hacer la referencia y aque... <<la funcion dentro de la libreria>> void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){ do{ if((players+n)->jugada > 7.5){ printf("El %dº jugador se paso y pierde 2p\n",n); (players+n)->puntos -= 2; printf("Puntuacion total: %d",(players+n)->puntos); }else if((players+n)->jugada > banca->jugada){ printf("El %dº jugador gana a la banca, gana 2p\n"); (players+n)->puntos += 2; printf("Puntuacion total: %d",(players+n)->puntos); } else { printf("La BANCA gana al %dº jugadorn\n",n); banca->puntos += 2; } n--; }while(n>0); }
Solo me sale el error cuando uso el puntero players con banca no tengo ningun problema, el error es el de arriba, uso netbeans por si sirve de algo.. Creo que debe ser una tonteria pero no atino a saber donde deberia hacer la referencia y ¿si fuera algo asi porque con banca no me da problemas? ... y pudiesen ayudar se lo agradeceria.. Saludos y Gracias
|
|
« Última modificación: 23 Julio 2010, 16:17 pm por dkmarley »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
Por favor pon el source completo, y utiliza las etiquetas GeShi.
|
|
|
En línea
|
|
|
|
dkmarley
Desconectado
Mensajes: 18
|
sobre lo de la etiquetas geshi no tengo ni dea a que te refieres xDD lo siento... os dejo como llamo a la funcion y como declaro la estructura.
#include "lib75.h"
struct perfiljugador{ float jugada; int puntos; };
dentro del main....
struct perfiljugador *players;
//Reservo memoria segun los jugadores.. players = reservar(j);
CalcularPuntos(players,j-1,&banca); // la banca lo paso asi porque no es puntero
//Funcion para reservar struct perfiljugador *reservar(int n){ struct perfiljugador *p; p = (struct perfiljugador *) malloc(n*sizeof(p)); return p; }
Creo que con esto lo llevas todo ya que lo demas que tengo es para pedir el numero de jugadores y funcion para el aleatorio. Espero haber puesto la informacion necesaria sino aora modifico el post...xD
|
|
« Última modificación: 23 Julio 2010, 16:20 pm por dkmarley »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
Tal vez te ayude esto: #include <stdio.h> #include <stdlib.h> struct perfiljugador{ float jugada; int puntos; }; struct perfiljugador *reservar(int n){ struct perfiljugador *p; p = (struct perfiljugador *) malloc(n *sizeof(p )); return p; } void CalcularPuntos(struct perfiljugador *, int, struct perfiljugador *); int main() { struct perfiljugador *players; players = reservar(2); players[0].jugada = 10.5; players[0].puntos = 5; players[1].jugada = 5.1; players[1].puntos = 3; printf("\nJugadas>%f\n", players ->jugada ); printf("\nPuntos>%d\n", players ->puntos ); printf("\nJugadas>%f\n", players [1]. jugada); printf("\nPuntos>%d\n", players [1]. puntos); CalcularPuntos(players, 2, &players[1]); return 0; } void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){ do{ if(players[n].jugada > 7.5){ printf("El %dº jugador se paso y pierde 2p\n",n ); players[n].puntos -= 2; printf("Puntuacion total: %d",players [n ]. puntos); }else if(players[n].jugada > banca->jugada){ printf("El %dº jugador gana a la banca, gana 2p\n", n ); players[n].puntos += 2; printf("Puntuacion total: %d", players [n ]. puntos); } else { printf("La BANCA gana al %dº jugadorn\n",n ); banca->puntos += 2; } n--; }while(n>0); }
Para utilizar GeShi, encierra el código entre las etiquetas: [ code = c] [ /code]
|
|
|
En línea
|
|
|
|
dkmarley
Desconectado
Mensajes: 18
|
Lo siento pero no veo como podria ayudar eso a mi problema ... la distribucion del programa me gusta como esta... la funciones en su libreria y el codigo principal en el main...
He probado a declara la funciones en el main pero aun asi me sigue saliendo los errores ... gracias de todas formas por el aporte y si alguien mas se apunta a comentar se lo agradeceria
Saludos
|
|
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
Leíste el código? Verás que estás utilizando mal los operadores de acceso a estructura, y al parecer tampoco sabes utilizar tu lista de estructuras... En ningún momento dije que tenías que poner TODO en un solo programa. Ahora bien, en la función que elaboraste "CalcularPuntos" debes modificar algunas cosas, pero puedes guiarte por como utilizo los accesos a estructuras en main. Fijate el resultado para que tu función trabaje correctamente: void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){ do{ if(players[n].jugada > 7.5){ printf("El %dº jugador se paso y pierde 2p\n",n + 1); players[n].puntos -= 2; printf("Puntuacion total: %d",players [n ]. puntos); }else if(players[n].jugada > banca->jugada){ printf("El %dº jugador gana a la banca, gana 2p\n", n + 1); players[n].puntos += 2; printf("Puntuacion total: %d", players [n ]. puntos); } else { printf("La BANCA gana al %dº jugadorn\n",n ); banca->puntos += 2; } n--; }while(n>=0); //Acuerdate que se apunta hasta el primer elemento que es 0 }
|
|
« Última modificación: 23 Julio 2010, 16:24 pm por cbug »
|
En línea
|
|
|
|
dkmarley
Desconectado
Mensajes: 18
|
Buenas!
yo creo que no es por navegar mal dentro de la estructura ya que he realizado practicas similares y no he tenido problemas.. aun asi con tu forma de navegar me sigue saliendo los errores que comente arriba..
gracias por lo del while se me avia pasao xDD ....
|
|
« Última modificación: 23 Julio 2010, 16:30 pm por dkmarley »
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
cbug@laptop:~/Desktop gcc p.c cbug@laptop:~/Desktop$ ./a.out La BANCA gana al 1º jugadorn El 1º jugador se paso y pierde 2p
Si pruebas el siguiente programa verás que funciona correctamente: #include <stdio.h> #include <stdlib.h> struct perfiljugador{ float jugada; int puntos; }; struct perfiljugador *reservar(int n){ struct perfiljugador *p; p = (struct perfiljugador *) malloc(n *sizeof(p )); return p; } void CalcularPuntos(struct perfiljugador *, int, struct perfiljugador *); int main() { struct perfiljugador *players; players = reservar(2); players[0].jugada = 10.5; players[0].puntos = 5; players[1].jugada = 5.1; players[1].puntos = 3; CalcularPuntos(players, 1, &players[0]); return 0; } void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){ do{ if(players[n].jugada > 7.5){ printf("El %dº jugador se paso y pierde 2p\n",n + 1); players[n].puntos -= 2; printf("Puntuacion total: %d",players [n ]. puntos); }else if(players[n].jugada > banca->jugada){ printf("El %dº jugador gana a la banca, gana 2p\n", n + 1); players[n].puntos += 2; printf("Puntuacion total: %d", players [n ]. puntos); } else { printf("La BANCA gana al %dº jugadorn\n",n ); banca->puntos += 2; } n--; }while(n>=0); }
De última, o tienes mal configurado netbeans, o directamente estás haciendo cualquier otra cosa que no podemos estar adivinando pues no ponés tu organización de directorio archivos de cabecera, etc. PD: Utiliza gcc.
|
|
« Última modificación: 23 Julio 2010, 16:34 pm por cbug »
|
En línea
|
|
|
|
dkmarley
Desconectado
Mensajes: 18
|
xDD ya esta solucionado, nose si la solucion se puede convertir en un malhabito o algo pero funciona...
el problema es (alomjor no me explique bien) que la declaracion de la estructura esta en el main y la funcion en la libreria aparte entonces es como si no encontrase esa estructura... lo que he hecho es declarar la estructura en el .h.. ¿que te parece esta solucion?
gracias por toda la ayuda
|
|
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
NetBeans no te da una lista de errores? Seguiría recomendando gcc También que directamente utilices [] ya que da una idea más intuitiva de una lista, que un *(puntero + offset).
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOLUCIONADO]¿Como printear un valor de un struct dentro de otro struct?
Programación C/C++
|
Firos
|
0
|
5,186
|
24 Marzo 2011, 13:47 pm
por Firos
|
|
|
Un struct dentro de una matriz
Programación C/C++
|
freakx
|
2
|
6,377
|
23 Enero 2012, 02:16 am
por freakx
|
|
|
cargar struct dentro de una matriz
Programación C/C++
|
eriss_15
|
1
|
2,897
|
18 Mayo 2012, 06:33 am
por exel
|
|
|
Problema Librería SFML
Programación C/C++
|
overxfl0w13
|
2
|
3,265
|
28 Junio 2012, 15:02 pm
por anonimo12121
|
|
|
Duda con respecto a struct dentro de struct
Programación C/C++
|
Naimaderis
|
1
|
3,484
|
2 Abril 2017, 00:10 am
por ivancea96
|
|