C++ erreur: référence à la non-membre statique fonction doit être appelée

Je suis en train de créer une classe abstraite de base du comportement de libuv de fonctions de gestion de réseau.

#define TCP_BACKLOG 256
class _tcp {
    uv_tcp_t* tcp = NULL;
    public:
    ~_tcp() { delete tcp; }
    void listen_uv_listen_uv_connection_cb(uv_stream_t* stream, int status) {
        printf("NEW CONNECTION\n");
    }
    void listen(const char* host, int port) {
        tcp = new uv_tcp_t();
        uv_tcp_init(uv_default_loop(), tcp);
        sockaddr_in* addr = new sockaddr_in();
        uv_ip4_addr(host, port, addr);
        uv_tcp_bind(tcp, (const sockaddr*)addr, 0);
        delete addr;

        uv_listen((uv_stream_t*)tcp, TCP_BACKLOG, listen_uv_listen_uv_connection_cb);
    }
};

Le problème avec le précédemment montré code, c'est que lorsque j'essaie de compiler, je reçois le message d'erreur suivant:

error: reference to non-static member function must be called
  on: uv_listen((uv_stream_t*)tcp, TCP_BACKLOG, listen_uv_listen_uv_connection_cb);
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Et il points de listen_uv_listen_uv_connection_cb comme le coupable.

Quelqu'un peut m'expliquer, pourquoi est-ce une erreur, et comment suis-je censé faire?

La uv_listen() et uv_connection_cb signatures sont déclarées comme suit

UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb);
typedef void (*uv_connection_cb)(uv_stream_t* server, int status);
supprimer les poignées de pointeur null par lui-même, votre chèque est redondant
Merci, ne savent pas à ce sujet.
Pouvez-vous montrer le réel uv_listen() signature s'il vous plaît?
Bien sûr, l'ajouter à la question.

OriginalL'auteur almosnow | 2014-11-12