取消引用指向不完整类型的指针

我从这段代码中得到以下错误,我是C的新手并且随着我的学习而学习!

cc -g -I /usr/lib/i386-linux-gnu -c anld.c anld.c: In function 'main': anld.c:379:11: error: dereferencing pointer to incomplete type 

主.C文件

 bridge_t *bridge_p = bridge_new(); //Create / init our bridge bridge_p->s = server_connect(options.server_p, options.dest_port, options.ifname_p, options.gateway_p); 

bridge .C文件

 struct bridge { int s; }; bridge_t *bridge_new(void) { bridge_t *bridge_p; bridge_p = OPENSSL_malloc(sizeof *bridge_p); if (!bridge_p) { return NULL; } /* Initialise bridge */ memset(bridge_p, '\0', sizeof *bridge_p); bridge_p->s = -1; return bridge_p; } 

bridge.h文件

 typedef struct bridge bridge_t; 

有人有什么想法?

为了避免你提到的错误,你应该移动它:

 struct bridge { int s; }; 

to bridge.h

目前它被声明为模块(翻译单元) bridge.c本地,因此其成员对外界不了解。


或者,如果要隐藏struct bridge的内部,则需要为模块bridge.c添加一个getter和setter函数,以便为每个要从外部访问的成员添加,例如:

bridge.h

 typedef struct bridge bridge_t; void brigde_s_set(bridge_t *, int); int bridge_s_get(bridge_t *); 

bridge.c

 #include "bridge.h" struct bridge { int s; }; int brigde_s_set(bridge_t * pb, int s) { pb->s = s; } int bridge_s_get(bridge_t * pb) { return pb->s; } 

所以main.c的片段看起来像:

 #include "bridge.h" ... bridge_t * bridge_p = bridge_new(); //Create / init our bridge bridge_s_set(bridge_p, server_connect(options.server_p, options.dest_port, options.ifname_p, options.gateway_p));