Tôi đang cố gắng tạo lớp để tóm tắt một số hành vi cơ bản của các chức năng mạng của libuv.Lỗi C++: tham chiếu đến hàm thành viên không tĩnh phải được gọi là
#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);
}
};
Vấn đề với mã hiển thị trước đó là khi tôi cố gắng để biên dịch nó tôi nhận được lỗi sau:
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);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Và nó trỏ tới listen_uv_listen_uv_connection_cb
là thủ phạm.
Ai đó có thể giải thích cho tôi, tại sao lỗi đó xảy ra và tôi phải sửa lỗi như thế nào?
Các uv_listen()
và uv_connection_cb
chữ ký được khai báo như sau
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);
xóa tay cầm con trỏ rỗng, kiểm tra của bạn là dư thừa – Slava
@Slava Cảm ơn, không biết về điều đó. – almosnow
Bạn có thể hiển thị chữ ký 'uv_listen()' thực tế không? –