0

これは簡単に修正できる問題のようですが、私は何か間違っています。同様のスレッドをすべて調べましたが、問題を解決するものは何も見つかりませんでした。

基本的に: 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 があります。

4

1 に答える 1

4

struct buffereventlibeventのパブリックヘッダーで不完全な型としてのみ宣言されています。その内容は、パブリックAPIのユーザーには非表示になっています。buffereventsを操作するすべてのlibevent関数は、buffereventへのポインターを受け取るので、ここで必要なのは

struct bufferevent *bev[8];

さらに、その宣言を付けたくないextern場合は、リンク時に未定義のシンボルエラーが発生することに注意してください。そのファイルでのみ参照されている場合は、static代わりに使用する必要があります。それ以外の場合は、表示したファイルの-less宣言に加えてextern、アプリケーションのヘッダーファイルの1つに宣言が含まれている必要があります。extern

于 2012-10-17T22:38:53.220 に答える