Есть несколько вещей, которые мешают твоему typedef. Предполагая, что вы используете MSVC.
Простой способ объявить типы, которые у вас есть, был бы что-то вроде:
Этот typedef включает тип _type {}, * ptype; формат, который объявляет тип и указатель на ваш пользовательский тип одновременно. Если вы видите внизу в hash_table, вы можете использовать таблицу pbucket *, которая устраняет лишние символы *** в вашем коде и может помочь при выполнении динамического выделения (помогите настолько, что вы будете уверены в том, что выделяете и т. ). Ваш оригинальный typedef, если вы смотрели, имел typedef struct bucket {} bucket ;, вам нужно как минимум изменить одно из двух имен "bucket", которые у вас есть, когда вы указываете свой typedef.
Вам также необходимо выполнить приведение, если вы используете настройки сборки C ++, при использовании обычного C вам может не потребоваться приведение, поэтому ваша строка malloc будет (со следующими изменениями typedef, которые я сделал);
hash_table* ht = (phash_table) malloc(sizeof(hash_table)*101);
В любом случае, этот фрагмент должен работать для вас;
typedef struct _bucket {
char *key;
void *data;
_bucket *next;
} bucket, *pbucket;
typedef struct _hash_table {
size_t size;
pbucket *table;
}hash_table, *phash_table;