jimacos89 Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 έχω ένα πρόβλημα στο να πάρω δεδομένα μέσα από κάποιες δομές. έχω τις παρακάτω δομές typedef struct htcell { struct htcell *next; const void *key, *value; } *HashTableCell; typedef struct val{ char* path; char* HTM_code; int html_len; int html_version; }val; Στο *value βάζω μια struct τύπου val. Αυτό που θέλω, είναι όταν πάρω ένα HashTableCell να έχω πρόσβαση στην τιμή html_version. HashTableCell HCell; int version; version = &(HCell->value.html_version); το παραπάνω δεν μου αναγνωρίζει όμως το περιεχόμενο του value. καμία ιδέα?
virxen75 Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 στείλε ένα ολοκληρωμένο παράδειγμα(κώδικα)
jimacos89 Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 στείλε ένα ολοκληρωμένο παράδειγμα(κώδικα) version = PathVersion(unl); key = strhash(unl); Hcell= Malloc(sizeof(HashTableCell)); Hcell = HashTable_find(&cache,&key); //version2 = &(Hcell->value->html_version); βασικα αυτο το κομματι ειναι που κολλαω.. οπου το version einai int; το Malloc ειναι συναρτηση δικη μας και το Hcell ειναι επιστροφη τυπου HashTableCell, και cache το HashTable που οριζω το θεμα ειναι οτι δεν μπορω να παρω την τιμη απο το εσωτερικο struct. Μου βγαζει οτι το html_version δεν ανηκει στο struct.
virxen75 Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 αυτό βοηθάει? > #include <stdio.h> #include <stdlib.h> typedef struct val{ char* path; char* HTM_code; int html_len; int html_version; }val; typedef struct htcell { struct htcell *next; const void *key; val *value; } *HashTableCell; int main(){ HashTableCell HCell; HCell=(HashTableCell)malloc(sizeof(struct htcell)); HCell->next=NULL; HCell->key="aaa"; val * new1=(val *) malloc(sizeof(struct val)); new1->html_version=5; HCell->value=new1; int version; version = HCell->value->html_version; printf("\n version=%d",version); getchar(); return 0; }
jimacos89 Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 αμα το οριζαμε εμεισ το HCell θα μπορουσαμε να το κανουμε ετσι! το HCell το παιρνουμε απο την συναρτηση HashTableFind() HashTableCell HashTable_find(HashTable *this, const void* key) { size_t h; h = ht_bucket(this, key); return ht_find(this, this->table[h], key); } static size_t ht_bucket(HashTable* this, const void* key) { return this->hfunc(key) % this->tsize; } static HashTableCell ht_find(HashTable *this, HashTableCell c, const void* key) { while(c != NULL) { if(this->eqpred(c->key,key)!=0) break; c = c->next; } return c; } οπότε στην ουσια έχει ήδη τιμή. Το θέμα ειναι να την πάρω για να την χρησιμοποιήσω.
Evgenios1 Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Το const void* πρεπει να το κανεις καστ σε val για να το δεις σα val. >HashTableCell *HCell = getsomthing(); int version; version = ((val*)HCell->value)->html_version;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.