您好我想在另一个struct(hash_table)中添加一个名为hash_entry的结构到一个hash_entry数组,但是我收到了这个错误:
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;
我的结构:
typedef struct hash_entry{
int value;
} Hash_entry;
typedef struct hash_table{
struct hash_entry * table;
} Hash_table;
我的代码将内存分配给数组并添加:
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 :(得分:2)
您为变量指定了与该类型相同的名称,将其更改为:
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;
然后注意到这一点:
my_hash_table->table = NULL;
实际上是错误的,因为你想使用table
,所以删除它。
全部放在一起(并亲自检查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;
}
输出:
gsamaras@gsamaras:~$ gcc -Wall px.c
gsamaras@gsamaras:~$ ./a.out
Value = 10