I get this error while compiling this .c source file
/INIT_SOURCE_BUILD/src/names_list.c:7: error: storage size of ‘names’ isn’t known
#include <stdio.h>
#include "list.h"
int main(){
    struct  List names;
    names->size = 3;
    struct ListElmt michael;
    struct ListElmt john;
    struct ListElmt adams;
    names->head = michael;
    michael->data = 12;
    michael->next = john;
    john->data = 14;
    john->next = adams;
    adams->data = 16;
    struct ListElmt pointer = List->head;
    for(int x = 0; x < 3 ; x++){
        printf("Iteration.%d data: %d", x, pointer->data);
        pointer->next = pointer->next->next;
    }
}
and here is header of this linked list
#ifndef LIST_H
#define LIST_H
#include <stdio.h>
/*                                      Define linked list elements*/
typedef struct _ListElmt{
void                *data;
struct _ListElmt        *next;
} ListElmt;
/*                                      Define a structure for the list*/
typedef struct _List{
int                 size;
int                 (*match)(const void *key1, const void *key2);
void                (*destroy)(void *data);
ListElmt             *head;
ListElmt             *tail;
} List;
void list_init(List *list, void (*destroy)(void *data));
void list_destroy(List *list);
int list_ins_next(List *list, ListElmt *element, const void *data);
int list_rem_next(List *list, ListElmt *element, void **data);
int list_size(const List *list);
ListElmt *list_head(const List *list);
ListElmt *list_tail(const List *list);
int list_is_head(const ListElmt *element);
int list_is_tail(const ListElmt *element);
void *list_data(const ListElmt *element);
ListElmt *list_next(const ListElmt *element);
#endif
When you typedef a struct like that, you don't have to use struct when declaring it: 
List names;
instead of
struct List names;
It's also not a pointer, so names->size should be names.size.
struct List names; doesn't declare a pointer, but you're trying to dereference it (using ->).  Use names.size instead.
The struct is called _List. The typedef is List. So you want
 List names;
or
struct _List names; /* probably not, the _ is convention for internal names */
Your line is declaring a "struct List" which isn't defined yet.
The other answers are quite correct about the . vs -> issue
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With