gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:00 25 4
gpt4 key购买 nike

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

基本上: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: 错误:数组类型的元素类型不完整

有什么想法吗? :(

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

最佳答案

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

struct bufferevent *bev[8];

请进一步注意,您不想放置 extern在那个声明上,否则你会在链接时得到一个 undefined symbol 错误。如果它只在那个文件中被引用,你应该使用static反而。否则应该有一个带有 extern 的声明在您应用程序的一个 文件中除了 extern - 在您显示的文件中少声明。

关于c - 结构数组 - 数组具有不完整的元素类型(在 C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com