Hata

2016-04-06 25 views
0

Merhaba ben başka yapı (hash_table) iç hash_entry bir diziye hash_entry denilen bir yapı eklemek triyng, ama ben bu hatayı almaya duyuyorum:Hata

hash.c:67:5: error: invalid use of undefined type ‘struct hash_entry’ 
my_table->table[0] = e; 
^ 
hash.c:67:30: error: dereferencing pointer to incomplete type 
my_table->table[0] = e; 

Benim yapılar:

typedef struct hash_entry{ 
    int value; 
} Hash_entry; 

typedef struct hash_table{ 
    struct hash_entry * table; 

} Hash_table; 

Kodum dizisine hafızayı alloc ve eklemek için:

Hash_entry e; 
e.value = 10; 

Hash_table *my_table = (Hash_table *) malloc(sizeof (Hash_table)); 

my_table->table = malloc (sizeof (Hash_entry) * 10); 

my_table->table[0] = e; 
+0

Neden tipi ve değişken var aynı ismi? Ne elde edeceksin –

cevap

2

Sen vermek yo türüyle ur değişken aynı ada, ardından bu değiştirin:

hash_table *my_hash_table = (hash_table*) malloc(sizeof (hash_table)); 

my_hash_table->table = malloc (sizeof (hash_entry) * 10); 
my_hash_table->table = NULL; 

my_hash_table->table[0] = e; 

ve sonra fark bu o:

my_hash_table->table = NULL; 

Eğer table kullanmak, böylece kaldırmak istiyorum çünkü aslında yanlıştır.


hep birlikte koymak (ve bizzat kontrol mystruct.c):

#include <stdio.h> 
#include <stdlib.h> 

typedef struct hash_entry{ 
     int value; 
} hash_entry; 

typedef struct hash_table{ 
     struct hash_entry * table; 
} hash_table; 

int main(void) { 
     hash_entry e; 
     e.value = 10; 

     hash_table *my_hash_table = (hash_table*) malloc(sizeof (hash_table)); 
     my_hash_table->table = malloc (sizeof (hash_entry) * 10); 

     my_hash_table->table[0] = e; 
     printf("Value = %d\n", my_hash_table->table[0].value); 
     return 0; 
} 

Çıktı:

[email protected]:~$ gcc -Wall px.c 
[email protected]:~$ ./a.out 
Value = 10 
+0

Tamam, adı değiştirdim ve bunu kaldırdım, ancak hata hala devam ediyor ... ayrıca ilk yorumda da güncelleme yapıyorum. – Antonio

+0

@Antonio, * lütfen güncellenmiş cevabımı kontrol et, daha iyi mi? :) – gsamaras