这似乎是一个容易解决的问题,但我做错了什么。 我已经浏览了所有类似的线程,但没有找到任何可以解决我的问题的东西,所以任何帮助将不胜感激!
基本上:C 程序,我正在尝试创建一个缓冲区事件数组。
#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 之外定义缓冲区事件,使它们在我的代码中的任何地方都可以访问,而无需传递它们。 我在该地区还有其他 #define,所以我确定这与我建造它们的方式有关??
struct bufferevent
仅在 libevent 的公共标头中声明为不完整的类型;其内容对公共 API 的用户是隐藏的。 所有对缓冲区事件进行操作的 libevent 函数都有一个指向缓冲区事件的指针,所以这里你想要的是
struct bufferevent *bev[8];
进一步请注意,您不想在该声明上放置extern
,否则您将在链接时收到未定义的符号错误。 如果仅在该文件中引用它,则应改用static
。 否则,除了显示的文件中的 extern
less 声明外,还应在应用程序的一个头文件中有一个带有 extern
的声明。