forward declaration of a struct in C?

匿名 (未验证) 提交于 2019-12-03 09:06:55

问题:

#include   struct context;  struct funcptrs{   void (*func0)(context *ctx);   void (*func1)(void); };  struct context{     funcptrs fps; };   void func1 (void) { printf( "1\n" ); } void func0 (context *ctx) { printf( "0\n" ); }  void getContext(context *con){     con=?; // please fill this with a dummy example so that I can get this working. Thanks. }  int main(int argc, char *argv[]){  funcptrs funcs = { func0, func1 };    context *c;    getContext(c);    c->fps.func0(c);    getchar();    return 0; } 

I am missing something here. Please help me fix this. Thanks.

回答1:

Try this

#include   struct context;  struct funcptrs{   void (*func0)(struct context *ctx);   void (*func1)(void); };  struct context{     struct funcptrs fps; };   void func1 (void) { printf( "1\n" ); } void func0 (struct context *ctx) { printf( "0\n" ); }  void getContext(struct context *con){     con->fps.func0 = func0;       con->fps.func1 = func1;   }  int main(int argc, char *argv[]){  struct context c;    c.fps.func0 = func0;    c.fps.func1 = func1;    getContext(&c);    c.fps.func0(&c);    getchar();    return 0; } 


回答2:

A struct (without a typedef) often needs to (or should) be with the keyword struct when used.

struct A;                      // forward declaration void function( struct A *a );  // using the 'incomplete' type only as pointer 

If you typedef your struct you can leave out the struct keyword.

typedef struct A A;          // forward declaration *and* typedef void function( A *a ); 

Note that it is legal to reuse the struct name

Try changing the forward declaration to this in your code:

typedef struct context context; 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!