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 accceso a estructuras.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con accceso a estructuras.  (Leído 3,460 veces)
chemaspain

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Problema con accceso a estructuras.
« en: 6 Mayo 2011, 15:07 pm »

Hola a todos.

Estoy muy agobiado con una practica de programacion que debo entregar pronto y no se como resolver un problema leve que me ha surgido que me tiene muy atrancado, a ver si me podeis echar un cable y ayudarme. Esta es la funcion y la definicion de la estructura:

Código
  1.  
  2. typedef struct tSupplier{
  3. int idSupplier;
  4.    tString name;
  5.    tString addr;
  6.    int phone[MAX_PHONE];
  7.    struct tFurniture *firstFur,*currFur;                              
  8.    float profitMargin;
  9. } tSupplier;
  10.  
  11. typedef struct {
  12. int idFurniture;
  13. int idSup;
  14. tString nameFur;
  15. float sizes[MAX_SIZES];
  16. tString typeFur;
  17. tColor color;
  18. float costPrice;
  19. float retailPrice;
  20. int deliveryTime;
  21. struct tFurniture *prevFur, *nextFur;                              
  22. struct tFurniture *prevFurType, *nextFurType;
  23. } tFurniture;
  24.  
  25. ........
  26.  
  27. void fur_get_name (tFurniture f, tString n)
  28. {
  29.     strcpy (n,f.nameFur);        
  30. }
  31.  
  32. .......
  33.  
  34. void sup_set_profitMargin (tSupplier *s, float r)
  35. {
  36.     tString name;
  37.     float price;
  38.  
  39.     s->profitMargin = r;
  40.  
  41.     s->currFur=s->firstFur;
  42.     if (s->currFur!=NULL)
  43.        {
  44.             sup_get_name(*s,name);
  45.             printf("-----------------------------------------------------------------");
  46.             printf("Supplier: %s \n",name);
  47.  
  48.             if (s->idSupplier == s->currFur->idSup) /* Aqui me da el primer error de dereferencing  */
  49.                       s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice;
  50.             while (s->currFur!=NULL)
  51.                   {
  52.                        fur_get_name(s->currFur,name); /* Aqui me da el error de incompatible tipo de argumento en parametro 1*/
  53.                        printf("Furniture: %s \t",name);
  54.  
  55.                        price=fur_get_retailPrice(s->currFur);
  56.                        printf("Old retail price: %d \t", price);
  57.  
  58.                        s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice;
  59.  
  60.  
  61.                        price=fur_get_retailPrice(s->currFur);
  62.                        printf("New retail price: %d \n", price);
  63.  
  64.                        s->currFur=s.currFur->nextFur;
  65.                   }
  66.             printf("-----------------------------------------------------------------");
  67.        }
  68. }

El caso es que me da el derreferencing ese tipico de las estructuras mal leidas pero es que he probado de todo y no se como solucinarlo. Si alguien me guiara en como acceder a la estructura, en las líneas marcadas con los comentarios, solo hay dos, le estaría enormemente agradecido. El resto ya las resolvería yo, por que son iguales.

Gracias.

Saludos.
Chema.


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #1 en: 6 Mayo 2011, 19:28 pm »

Código
  1. typedef struct{}tFurniture

struct qué?

esa struct necesitará un nombre, no?


En línea

chemaspain

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #2 en: 6 Mayo 2011, 20:09 pm »

Si, perdon, se me olvido colocar el  nombre de la estructura, y parece que al hacerlo ya no me da el fallo de dereferencing, a veces es una tonteria pero cuando te ciegas, es que no hay manera de resolverlo.

Sigo sufriendo el otro fallo de incompatible tipo de argumento, que me sigue dando en la linea que marque con el comentario correspondiente...Alguna sugerencia??????

Gracias por la ayuda Akai.

Saludos.
Chema.
En línea

Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #3 en: 6 Mayo 2011, 20:31 pm »

Esa función, en el primer parámetro está esperando un dato de tipo tFurniture, y tu le estás pasando un puntero.
En línea

chemaspain

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #4 en: 6 Mayo 2011, 20:39 pm »

Ya sabia eso acemax, de todas formas gracias por tu aportacion, el caso es como transformo ese parametro en un tFurniture en vez de un puntero, que es lo que ahora mismo tengo, ya que el encabezado de la funcion no lo puedo modificar, y estoy un pelin verde en el tema de pasos por valor o por referencia.

Entiendo cuando debo pasarlos por valor o por referencia pero en C se me resiste como indicarselo para que lo compile correctamente y no de errores. Entonces siempre voy tanteando si le pongo el asterisco, el punto o el ->.

Alguna ayudita con el dichoso puntero?????

Gracias.

Saludos.
Chema.
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #5 en: 7 Mayo 2011, 10:51 am »

chemaspain, no te lo tomes a mal, por muy brusco que pueda somar, es un consejo: necesitas revisarte la teoria básica sobre el tema porque es precisamente eso lo que te está fallando. De todas formas te hago un resumen rápido.

& (ampersand)--> obtiene la dirección de memoria de una variable.

* (asterisco)--> obtiene lo apuntado por una variable.

. (punto) accede al campo de una estructura.

-> (flecha) --> accede al campo de una estructura apuntada por la variable. Es un atajo de *(puntero).campo

Por otro lado, tu problema es, que :

void fur_get_name (tFurniture f, tString n)

espera un tFurniture, no un *tFurniture como tu le pasas aquí:
fur_get_name(s->currFur,name)
s->CurrFur es un *tFurniture que tu mismo te has definido en tu declaración de la estructura tSupplier.
En línea

chemaspain

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con accceso a estructuras.
« Respuesta #6 en: 7 Mayo 2011, 18:57 pm »

Hola  Akai.

Gracias por tus consejos y ayudas.

Al final lo resolvi, creandome un tFurniture auxiliar y asignandole el valor del tFurniture original que deseaba enviar a la funcion y no me dejaba, asi se lo pase correctamente. Quedo así la cosa:

Código
  1. void sup_set_profitMargin (tSupplier *s, float r)
  2. {
  3.     tString name;
  4.     float price;
  5.     tFurniture *pf,f;
  6.  
  7.     s->profitMargin = r;
  8.  
  9.     sup_firstFur (s, pf);
  10.  
  11.     if (pf!=NULL)
  12.        {
  13.             sup_get_name(*s,name);
  14.             printf("-----------------------------------------------------------------");
  15.             printf("Supplier: %s \n",name);
  16.  
  17.             if (s->idSupplier == s->currFur->idSup)
  18.                       s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice;
  19.             while (s->currFur!=NULL)
  20.                   {
  21.                        f=*s->currFur;    
  22.                        fur_get_name(f,name);
  23.                        printf("Furniture: %s \t",name);
  24.  
  25.                        price=fur_get_retailPrice(f);
  26.                        printf("Old retail price: %d \t", price);
  27.  
  28.                        s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice;
  29.  
  30.                        f=*s->currFur;
  31.                        price=fur_get_retailPrice(f);
  32.                        printf("New retail price: %d \n", price);
  33.  
  34.                        sup_next_Fur (s,pf);
  35.                   }
  36.             printf("-----------------------------------------------------------------");
  37.        }
  38. }
  39.  

Gracias a todos los que han respondido o me han intentado ayudar, al final salio bien la cosa.

Muchas gracias.

Saludos.
Chema.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda. Problema con arreglo de estructuras.
Programación C/C++
Gorka82 1 3,298 Último mensaje 11 Julio 2010, 06:26 am
por Littlehorse
Problema con estructuras
Programación C/C++
clodan 3 3,121 Último mensaje 14 Septiembre 2010, 18:41 pm
por Garfield07
Problema copiando Estructuras a Bytes xP
Programación Visual Basic
x64core 4 1,896 Último mensaje 10 Noviembre 2011, 19:12 pm
por x64core
C++ Problema propuesto usando estructuras repetitivas
Programación C/C++
Franz1628 3 3,151 Último mensaje 27 Enero 2012, 23:45 pm
por theluigy13etv
Problema con estructuras y apuntadores
Programación C/C++
angelihsahn 2 2,279 Último mensaje 31 Agosto 2013, 12:27 pm
por lanun
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines