Como hemos descubierto en los comentarios, el problema fue que la definición de struct T
ocurrió después de la definición de T
en el encabezado. Realmente tienes cosas al revés aquí. El encabezado debe definir todos los tipos y prototipos de función y sus archivos C deberían estar usándolos.
Lo que quiere hacer en su lugar es cambiar la firma de su función de inserción para recibir un puntero a sus datos y el tamaño de los datos. Luego puede asignar memoria para los datos, copiarlos y almacenarlos. No necesita un tipo específico, simplemente declare que es void *
.
void listInsertFirst(void *data, size_t data_size, int key, LinkedList* ListToInsertTo);
Entonces la persona que llama haría algo como esto:
struct T { int foo; };
struct T x = { ... };
int someKey = ...;
LinkedList *someList = ...;
listInsertFirst(&x, sizeof x, someKey, someList);
gracias, y ¿qué pasa si quiero que se escriba el tipo si alguien incluye el archivo h? – Belgi
¿Cómo se define LinkedList? –
Una cosa que debes tener en cuenta es que estás pasando una 'struct' * por valor * aquí. Eso es casi seguro que es una mala idea ... –