c - Dereferencing pointer to incomplete type -


i new c programming , mini project decided try implement stack in c using oop style structure in file genericstack.h shown below:

void _genericstack0001(void *,void *); void *_genericstack0002(void *); int _genericstack0003(void *);  typedef struct  {    struct genericstacknode *next;    void *data;    int type; }genericstacknode;  typedef struct  {     struct genericstacknode *top;     int count;     void (*add)(void *,void *);     void *(*pop)(void *);     int (*hasnext)(void *);     int (*getcount)(void *); }genericstack;  genericstack newgenericstack() {     genericstack *genstack = malloc(sizeof(genericstack));     genstack->add = _genericstack0001;     genstack->pop = _genericstack0002;     genstack->hasnext = _genericstack0003;     genstack->getcount = _genericstack0003;     genstack->top=null;     genstack->count = 0;     return *genstack; }  void _genericstack0001(void *self,void *data)//add {     genericstack *genstack = self;     if(genstack->top  == null)     {         genstack->top = malloc(sizeof(genericstacknode));         genstack->top->next = null;         genstack->top->type = 0;         genstack->top->data = data;     }     else     {         genericstacknode *temp = malloc(sizeof(genericstacknode));         temp->next = genstack->top;         temp->type = 0;         temp->data = data;         genstack->top = temp;         genstack->count++;     } }  void *_genericstack0002(void *self)//pop {     genericstack *genstack = self;     void *data = null;     if(genstack->top  == null)     {         return data;     }     else     {         genericstacknode *temp = genstack->top;         genstack->top = genstack->top->next;         data = temp->data;         free(temp);         genstack->count--;         return data;     } }  int _genericstack0003(void *self) {     genericstack *genstack = self;     return genstack->count; } 

all need know why (among many others) specific error:

genericstack.h:41:16: error: dereferencing pointer incomplete type    genstack->top->type = 0;  

i have checked other answers on stackoverflow concerning "dereferencing pointer incomplete type" cant seem understand.

you're getting error genericstack, have problem in both genericstack , genericstacknode.

in c, struct x , x different types. when write:

struct genericstacknode *next; 

it declares type called struct genericstacknode (and member pointer type). type incomplete because have not provided struct definition.

the type completed providing struct definition later, never that. instead, define unnamed struct , typedef genericstacknode , has no effect on struct genericstacknode.

then, struct genericstacknode *top; still uses same incomplete type, not struct defined above.

assuming meant pointer pointer same type of struct it's contained in, use pattern both of structs:

typedef struct x x;  struct x {     x *ptr; }; 

often people combine typedef struct definition find clearer have them separate.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -