C++| 构造函数参数不匹配?

补充一下,我想基于 libevent 实现一个 tcp 服务器,其中 server_socket 负责建立连接,server_connect 将客户端连接封装为一个类用于处理读写请求,但我需要在 server_connect 类中保存 server_socket 的引用

该类的声明:

class server_connect final {

public:
    explicit server_connect(server_socket &, int, event_base *);
    ...

private:
    server_socket &server_sock;
    ...

};

在另一个函数中将 server_connect 对象保存于 map 中

typedef std::pair<int, server_connect> connect_pair;

// 接收请求事件回调
void tcp_accept_handler(int socket_fd, short events, void *arg) {
    auto server_sk_ptr = (server_socket*) arg;
    ...
    // 此处代码调用 server_connect 构造函数时提示找不到对应的构造函数
    server_sk_ptr->connect_map.insert(connect_pair(client_sock_fd, server_connect(*server_sk_ptr, client_sock_fd, server_sk_ptr->ev_base)));
}
第一次遇到这样的问题,用的 ide 也显示参数列表匹配 (CLion 参数匹配上了会高亮显示)

image.png

求助

阅读 1.9k
1 个回答

这不是单纯的参数不匹配,而是:你在insert的时候,实际上是以拷贝方式传参,而server_connect可拷贝吗?

或者进一步:这个类型,它在概念上,其内容就能够被复制吗?

鉴于它很可能持有了系统资源(网络handle什么的),并且分明有个引用成员呆在那,我觉得它八成是不可拷贝的。

你应当使用emplace,或者在map里用智能指针。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题