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)
| | |-+  [C] Estructuras y punteros a funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Estructuras y punteros a funciones  (Leído 5,360 veces)
Amadeo Magnus

Desconectado Desconectado

Mensajes: 219



Ver Perfil
[C] Estructuras y punteros a funciones
« en: 10 Octubre 2010, 22:32 pm »

Buenas, tengo el sig. problema. Estoy haciendo una tabla de hash abierta (en C)... los profesores nos tiran las primitivas y nosotros lo tenemos que implementar.
Esta es la estructura del hash:

Código:
struct _hash_t {
    size_t largo;
    size_t cantidad;
    destruir_dato_t* destruir_dato; /*función para destruir un dato*/
    lista_t** vector; /*arreglo de punteros que apuntan a listas*/
};



El problema es con la primitiva "hash_crear" que es así (originalmente):


Código:
typedef void destruir_dato_t (hash_dato_t);

hash_t* hash_crear(destruir_dato_t destruir_dato);


Supuestamente eso que le pasas por parámetro es una función para destruir un dato. Ahora, como no entendí una chagar, la cambié y la deje así:

Código:
hash_t* hash_crear(destruir_dato_t (*destruir_dato)(hash_dato_t* valor))

y el typedef ese de arriba lo deje así (en el .h):

Código:
typedef void* destruir_dato_t;


Bueno, después cuando creo el hash, al final le pongo:

Código:
hash->destruir_dato = destruir_dato;

que sería la función que le pase.



Después, tengo otra función que es "hash_guardar" a la cuál entre otras cosas le paso una clave , y básicamente sitúa un iterador en X posición del arreglo (la que me devuelve una función de hashing), recorre la lista apuntada por esa posición, y si hay algún nodo de la lista cuya clave coincide con la clave que le pase a hash_guardar, lo borra y crea otro nodo con otros datos y lo inserta. El tema es cuando quiero borrar, que llamo a esta función:

Código:
hash->destruir_dato(dato_aux);

Y el compilador me tira "hash.c:161: error: el objeto ‘hash->destruir_dato’ llamado no es una función"


Entonces... ¿cómo se hace para usar bien una función almacenada en una estructura?  :huh:


Saludos.


En línea

El secreto del éxito es la constancia.
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: [C] Estructuras y punteros a funciones
« Respuesta #1 en: 13 Octubre 2010, 15:05 pm »

Código
  1. typedef void* hash_dato_t;//???
  2. typedef void (*destruir_dato_t )(hash_dato_t);
  3.  
  4. struct _hash_t {
  5.    size_t largo;
  6.    size_t cantidad;
  7.    destruir_dato_t destruir_dato; /*función para destruir un dato*/
  8.    lista_t** vector; /*arreglo de punteros que apuntan a listas*/
  9. };
  10.  
  11. void destruir_dato(hash_dato_t){
  12.  //code
  13. }
  14.  
  15. hash_t* hash_crear(destruir_dato_t destruir_dato){
  16. /*
  17. new/maloc part
  18. */
  19. hash->destruir_dato = destruir_dato;
  20. return hash;
  21. }
  22.  
  23. //code?
  24.  
  25. hash=hash_crear(destruir_dato);
  26. hash->destruir_dato(dato_aux);

S2


« Última modificación: 13 Octubre 2010, 15:08 pm por Karman » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
estructuras punteros programacion c
Programación C/C++
adexrn 4 2,715 Último mensaje 9 Abril 2012, 10:10 am
por adexrn
duda sobre estructuras y funciones
Programación C/C++
asdavid 3 1,836 Último mensaje 29 Noviembre 2012, 00:01 am
por durasno
Estructuras anidadas, funciones y punteros
Programación C/C++
NathanD 9 8,603 Último mensaje 18 Marzo 2013, 08:56 am
por 85
Punteros a estructuras...???
Programación C/C++
Ja_90 4 1,612 Último mensaje 11 Noviembre 2014, 21:10 pm
por eferion
Problema con realloc funciones y punteros a estructuras [RESUELTO]
Programación C/C++
Xargam 8 2,623 Último mensaje 3 Junio 2018, 21:36 pm
por Xargam
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines