Как мы выяснили в комментариях, проблема заключалась в том, что определение struct T
произошло после определения T
в заголовке. У тебя действительно есть вещи назад. Заголовок должен определять все типы и прототипы функций, и ваши файлы C должны их использовать.
Вместо этого вы хотите изменить сигнатуру вашей функции вставки, чтобы получить указатель на ваши данные и размер данных. Затем вы можете выделить немного памяти для данных, скопировать и сохранить их. Вам не нужен конкретный тип, просто объявите его void *
.
void listInsertFirst(void *data, size_t data_size, int key, LinkedList* ListToInsertTo);
Тогда вызывающий абонент сделает что-то вроде этого:
struct T { int foo; };
struct T x = { ... };
int someKey = ...;
LinkedList *someList = ...;
listInsertFirst(&x, sizeof x, someKey, someList);