【发布时间】:2015-01-09 17:22:09
【问题描述】:
我正在尝试创建一个类来抽象 libuv 网络功能的一些基本行为。
#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);
}
};
前面显示的代码的问题是,当我尝试编译它时,我收到以下错误:
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);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
它指出listen_uv_listen_uv_connection_cb是罪魁祸首。
有人可以向我解释一下,为什么这是一个错误,我应该如何解决它?
uv_listen() 和 uv_connection_cb 签名声明如下
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);
【问题讨论】:
-
delete 自己处理空指针,你的检查是多余的
-
@Slava 谢谢,不知道。
-
你能出示实际的
uv_listen()签名吗? -
好的,已将其添加到问题中。