0

这似乎是一个容易解决的问题,但我做错了什么。我已经经历了所有类似的线程,但没有找到任何解决我问题的方法,所以任何帮助将不胜感激!

基本上: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);
} 

当我尝试编译(使用 -levent,我可能会添加)时,我收到此错误:

src/mix/mix1.c:57:34: error: array type has incomplete element type

有任何想法吗?:(

注意:我在 main 之外定义了缓冲区事件,以使它们在我的代码中的任何地方都可以访问,而无需传递它们。我在该地区还有其他#define,所以我确定这与我构建它们的方式有关?

4

1 回答 1

4

struct bufferevent仅在 libevent 的公共标头中声明为不完整类型;它的内容对公共 API 的用户是隐藏的。所有对 bufferevent 进行操作的 libevent 函数都带有一个指向bufferevent 的指针,所以你想要的是

struct bufferevent *bev[8];

进一步注意,您不想添加extern该声明,否则您将在链接时收到未定义的符号错误。如果仅在该文件中提及它,则应static改为使用。否则,除了您显示的文件中的-less 声明外extern,您的应用程序的一个文件中还应该有一个声明。extern

于 2012-10-17T22:38:53.220 回答