elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con struct dentro de libreria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con struct dentro de libreria  (Leído 9,724 veces)
dkmarley

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Problema con struct dentro de libreria
« en: 23 Julio 2010, 15:21 pm »

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>>

Código:
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 Desconectado

Mensajes: 147



Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #1 en: 23 Julio 2010, 15:34 pm »

Por favor pon el source completo, y utiliza las etiquetas GeShi.


En línea

dkmarley

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #2 en: 23 Julio 2010, 15:43 pm »

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 Desconectado

Mensajes: 147



Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #3 en: 23 Julio 2010, 16:06 pm »

Tal vez te ayude esto:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct perfiljugador{
  5.    float jugada;
  6.    int puntos;
  7. };
  8.  
  9.  
  10. struct perfiljugador *reservar(int n){
  11.    struct perfiljugador *p;
  12.    p = (struct perfiljugador *) malloc(n*sizeof(p));
  13.    return p;
  14. }
  15.  
  16. void CalcularPuntos(struct perfiljugador *, int, struct perfiljugador *);
  17.  
  18. int main()
  19. {
  20. struct perfiljugador *players;
  21. players = reservar(2);
  22. players[0].jugada = 10.5;
  23. players[0].puntos = 5;
  24. players[1].jugada = 5.1;
  25. players[1].puntos = 3;
  26. printf("\nJugadas>%f\n", players->jugada);
  27. printf("\nPuntos>%d\n", players->puntos);
  28. printf("\nJugadas>%f\n", players[1].jugada);
  29. printf("\nPuntos>%d\n", players[1].puntos);
  30. CalcularPuntos(players, 2, &players[1]);
  31. return 0;
  32. }
  33.  
  34. void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){
  35.    do{
  36.        if(players[n].jugada > 7.5){
  37.            printf("El %dº jugador se paso y pierde 2p\n",n);
  38.            players[n].puntos -= 2;
  39.            printf("Puntuacion total: %d",players[n].puntos);
  40.        }else if(players[n].jugada > banca->jugada){
  41.            printf("El %dº jugador gana a la banca, gana 2p\n", n);
  42.            players[n].puntos += 2;
  43.            printf("Puntuacion total: %d", players[n].puntos);
  44.            }
  45.            else {
  46.                printf("La BANCA gana al %dº jugadorn\n",n);
  47.                banca->puntos += 2;
  48.            }
  49.        n--;
  50.    }while(n>0);
  51. }

Para utilizar GeShi, encierra el código entre las etiquetas: [code = c] [/code]
En línea

dkmarley

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #4 en: 23 Julio 2010, 16:15 pm »

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 Desconectado

Mensajes: 147



Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #5 en: 23 Julio 2010, 16:18 pm »

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:

Código
  1. void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){
  2.    do{
  3.        if(players[n].jugada > 7.5){
  4.            printf("El %dº jugador se paso y pierde 2p\n",n + 1);
  5.            players[n].puntos -= 2;
  6.            printf("Puntuacion total: %d",players[n].puntos);
  7.        }else if(players[n].jugada > banca->jugada){
  8.            printf("El %dº jugador gana a la banca, gana 2p\n", n + 1);
  9.            players[n].puntos += 2;
  10.            printf("Puntuacion total: %d", players[n].puntos);
  11.            }
  12.            else {
  13.                printf("La BANCA gana al %dº jugadorn\n",n);
  14.                banca->puntos += 2;
  15.            }
  16.        n--;
  17.    }while(n>=0); //Acuerdate que se apunta hasta el primer elemento que es 0
  18. }
« Última modificación: 23 Julio 2010, 16:24 pm por cbug » En línea

dkmarley

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #6 en: 23 Julio 2010, 16:27 pm »

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 Desconectado

Mensajes: 147



Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #7 en: 23 Julio 2010, 16:31 pm »

Código:
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct perfiljugador{
  5.    float jugada;
  6.    int puntos;
  7. };
  8.  
  9.  
  10. struct perfiljugador *reservar(int n){
  11.    struct perfiljugador *p;
  12.    p = (struct perfiljugador *) malloc(n*sizeof(p));
  13.    return p;
  14. }
  15.  
  16. void CalcularPuntos(struct perfiljugador *, int, struct perfiljugador *);
  17.  
  18. int main()
  19. {
  20. struct perfiljugador *players;
  21. players = reservar(2);
  22. players[0].jugada = 10.5;
  23. players[0].puntos = 5;
  24. players[1].jugada = 5.1;
  25. players[1].puntos = 3;
  26. CalcularPuntos(players, 1, &players[0]);
  27. return 0;
  28. }
  29.  
  30. void CalcularPuntos(struct perfiljugador *players, int n, struct perfiljugador *banca){
  31.    do{
  32.        if(players[n].jugada > 7.5){
  33.            printf("El %dº jugador se paso y pierde 2p\n",n + 1);
  34.            players[n].puntos -= 2;
  35.            printf("Puntuacion total: %d",players[n].puntos);
  36.        }else if(players[n].jugada > banca->jugada){
  37.            printf("El %dº jugador gana a la banca, gana 2p\n", n + 1);
  38.            players[n].puntos += 2;
  39.            printf("Puntuacion total: %d", players[n].puntos);
  40.            }
  41.            else {
  42.                printf("La BANCA gana al %dº jugadorn\n",n);
  43.                banca->puntos += 2;
  44.            }
  45.        n--;
  46.    }while(n>=0);
  47. }

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 Desconectado

Mensajes: 18


Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #8 en: 23 Julio 2010, 16:37 pm »

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 Desconectado

Mensajes: 147



Ver Perfil
Re: Problema con struct dentro de libreria
« Respuesta #9 en: 23 Julio 2010, 16:42 pm »

NetBeans no te da una lista de errores? Seguiría recomendando gcc  :xD
También que directamente utilices [] ya que da una idea más intuitiva de una lista, que un *(puntero + offset).
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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,189 Último mensaje 24 Marzo 2011, 13:47 pm
por Firos
Un struct dentro de una matriz
Programación C/C++
freakx 2 6,387 Último mensaje 23 Enero 2012, 02:16 am
por freakx
cargar struct dentro de una matriz
Programación C/C++
eriss_15 1 2,905 Último mensaje 18 Mayo 2012, 06:33 am
por exel
Problema Librería SFML
Programación C/C++
overxfl0w13 2 3,277 Último mensaje 28 Junio 2012, 15:02 pm
por anonimo12121
Duda con respecto a struct dentro de struct
Programación C/C++
Naimaderis 1 3,496 Último mensaje 2 Abril 2017, 00:10 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines