Autor
|
Tema: Problema con accceso a estructuras. (Leído 3,492 veces)
|
chemaspain
Desconectado
Mensajes: 9
|
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: typedef struct tSupplier{ int idSupplier; tString name; tString addr; int phone[MAX_PHONE]; struct tFurniture *firstFur,*currFur; float profitMargin; } tSupplier; typedef struct { int idFurniture; int idSup; tString nameFur; float sizes[MAX_SIZES]; tString typeFur; tColor color; float costPrice; float retailPrice; int deliveryTime; struct tFurniture *prevFur, *nextFur; struct tFurniture *prevFurType, *nextFurType; } tFurniture; ........ void fur_get_name (tFurniture f, tString n) { } ....... void sup_set_profitMargin (tSupplier *s, float r) { tString name; float price; s->profitMargin = r; s->currFur=s->firstFur; if (s->currFur!=NULL) { sup_get_name(*s,name); printf("-----------------------------------------------------------------"); printf("Supplier: %s \n",name ); if (s->idSupplier == s->currFur->idSup) /* Aqui me da el primer error de dereferencing */ s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice; while (s->currFur!=NULL) { fur_get_name(s->currFur,name); /* Aqui me da el error de incompatible tipo de argumento en parametro 1*/ printf("Furniture: %s \t",name ); price=fur_get_retailPrice(s->currFur); printf("Old retail price: %d \t", price ); s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice; price=fur_get_retailPrice(s->currFur); printf("New retail price: %d \n", price ); s->currFur=s.currFur->nextFur; } printf("-----------------------------------------------------------------"); } }
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
Mensajes: 823
|
typedef struct{}tFurniture
struct qué? esa struct necesitará un nombre, no?
|
|
|
En línea
|
|
|
|
chemaspain
Desconectado
Mensajes: 9
|
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
Mensajes: 55
|
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
Mensajes: 9
|
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
Mensajes: 823
|
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
Mensajes: 9
|
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: void sup_set_profitMargin (tSupplier *s, float r) { tString name; float price; tFurniture *pf,f; s->profitMargin = r; sup_firstFur (s, pf); if (pf!=NULL) { sup_get_name(*s,name); printf("-----------------------------------------------------------------"); printf("Supplier: %s \n",name ); if (s->idSupplier == s->currFur->idSup) s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice; while (s->currFur!=NULL) { f=*s->currFur; fur_get_name(f,name); printf("Furniture: %s \t",name ); price=fur_get_retailPrice(f); printf("Old retail price: %d \t", price ); s->currFur->retailPrice = s->profitMargin * s->currFur->costPrice; f=*s->currFur; price=fur_get_retailPrice(f); printf("New retail price: %d \n", price ); sup_next_Fur (s,pf); } printf("-----------------------------------------------------------------"); } }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda. Problema con arreglo de estructuras.
Programación C/C++
|
Gorka82
|
1
|
3,359
|
11 Julio 2010, 06:26 am
por Littlehorse
|
|
|
Problema con estructuras
Programación C/C++
|
clodan
|
3
|
3,146
|
14 Septiembre 2010, 18:41 pm
por Garfield07
|
|
|
Problema copiando Estructuras a Bytes xP
Programación Visual Basic
|
x64core
|
4
|
1,903
|
10 Noviembre 2011, 19:12 pm
por x64core
|
|
|
C++ Problema propuesto usando estructuras repetitivas
Programación C/C++
|
Franz1628
|
3
|
3,182
|
27 Enero 2012, 23:45 pm
por theluigy13etv
|
|
|
Problema con estructuras y apuntadores
Programación C/C++
|
angelihsahn
|
2
|
2,307
|
31 Agosto 2013, 12:27 pm
por lanun
|
|