这似乎是一个容易解决的问题,但我做错了。我已经通过所有类似的线程,并没有找到任何解决我的问题,所以任何帮助将不胜感激!
基本上: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);
}
当我尝试编译(WITH -levent,我可能会添加)时,我收到此错误:
src/mix/mix1.c:57:34: error: array type has incomplete element type
有什么想法吗? :(
注意:我在main之外定义了bufferevents,使它们在我的代码中的任何地方都可以访问而不传递它们。我在该区域有其他#define's,所以我确定这与我建造它们的方式有关吗?
答案 0 :(得分:3)
struct bufferevent
仅在libevent的公共标题中声明为不完整类型;其内容对公共API的用户隐藏。所有在bufferevents上运行的libevent函数都将指针带到bufferevent,所以你想要的是
struct bufferevent *bev[8];
进一步注意,您不希望将extern
放在该声明上,否则您将在链接时获得未定义的符号错误。如果只在该文件中引用它,则应使用static
代替。否则,除了 extern
之外,还应该在您的应用程序的标题文件中添加extern
声明 - 在您显示的文件中声明