[英]Array of structs - Array has incomplete element type (in C)
这似乎是一个容易解决的问题,但是我做错了事。 我经历了所有类似的话题,没有找到能解决我问题的任何东西,因此,我们将不胜感激!
基本上:C程序,并且我正在尝试创建一个bufferevents数组。
#include <event2/listener.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>
extern struct bufferevent bev[8];
//Then, my accept functions -- well, one of them...
static void accept1(struct evconnlistener *listener,
evutil_socket_t fd, struct sockaddr *address, int socklen,
void *ctx) {
/* A new connection was received on this port */
struct event_base *base = evconnlistener_get_base(listener);
bev[0] = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
/* Callback for when (*bufevent, data READ, data WRITTEN, event OCCURRED, *void) */
bufferevent_setcb(bev[0], read1, NULL, echo_event_cb, NULL);
}
当我尝试编译(带有-levent时,我可能会添加)时,出现此错误:
src/mix/mix1.c:57:34: error: array type has incomplete element type
有任何想法吗? :(
注意:我正在main之外定义bufferevent,以使它们在我的代码中的任何位置都可以访问而无需传递它们。 我在该地区还有其他#define,所以我确定这与我建立它们的方式有关?
struct bufferevent
仅在libevent的公共标头中声明为不完整类型; 它的内容对公共API的用户隐藏。 所有对bufferevents进行操作的libevent函数都使用一个指向 bufferevent的指针 ,因此,您想要的是
struct bufferevent *bev[8];
还要注意,您不想在该声明上加上extern
,否则在链接时会收到未定义的符号错误。 如果仅在该文件中引用过它 ,则应该使用static
。 否则,除了显示的文件中的extern
-less声明外 ,您的应用程序头文件中还应有一个带有extern
声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.