结构数组 - 数组具有不完整的元素类型(在C中)

时间:2012-10-17 22:29:42

标签: c libevent

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

基本上: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,所以我确定这与我建造它们的方式有关吗?

1 个答案:

答案 0 :(得分:3)

struct bufferevent仅在libevent的公共标题中声明为不完整类型;其内容对公共API的用户隐藏。所有在bufferevents上运行的libevent函数都将指针带到bufferevent,所以你想要的是

struct bufferevent *bev[8];

进一步注意,您不希望将extern放在该声明上,否则您将在链接时获得未定义的符号错误。如果只在该文件中引用它,则应使用static代替。否则,除了 extern之外,还应该在您的应用程序的标题文件中添加extern声明 - 在您显示的文件中声明