在类中引用函数时出现“调用没有匹配函数”
Posted
技术标签:
【中文标题】在类中引用函数时出现“调用没有匹配函数”【英文标题】:"No Matching Function for Call" when referencing function in class 【发布时间】:2017-11-20 12:33:09 【问题描述】:我正在尝试让 ESP8266 WebSocketsServer 实例与调度程序一起使用,但我无法使用 onEvent 函数对其进行编译。在设置中,我正在调用
webSocket.onEvent(std::bind(&WebServer::webSocketEvent, this));
。
WebServer
是类,webSocketEvent
定义为
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) ...
这是完整的编译错误日志:
sketch_nov20a.ino: In member function 'virtual void WebServer::setup()':
sketch_nov20a:25: error: no matching function for call to 'WebSocketsServer::onEvent(std::_Bind_helper<false, void (WebServer::*)(unsigned char, WStype_t, unsigned char*, unsigned int), WebServer* const>::type)'
webSocket.onEvent(std::bind(&WebServer::webSocketEvent, this));
^
sketch_nov20a.ino:25:68: note: candidate is:
In file included from sketch_nov20a.ino:3:0:
...\Arduino\libraries\WebSockets\src/WebSocketsServer.h:58:14: note: void WebSocketsServer::onEvent(WebSocketsServer::WebSocketServerEvent)
void onEvent(WebSocketServerEvent cbEvent);
^
...\Arduino\libraries\WebSockets\src/WebSocketsServer.h:58:14: note: no known conversion for argument 1 from 'std::_Bind_helper<false, void (WebServer::*)(unsigned char, WStype_t, unsigned char*, unsigned int), WebServer* const>::type aka std::_Bind<std::_Mem_fn<void (WebServer::*)(unsigned char, WStype_t, unsigned char*, unsigned int)>(WebServer*)>' to 'WebSocketsServer::WebSocketServerEvent aka std::function<void(unsigned char, WStype_t, unsigned char*, unsigned int)>'
你知道我做错了什么吗?
【问题讨论】:
请善待并张贴minimal reproducible example。貌似onEvent
不接受std::bind
的结果,但是不看相关代码很难知道。
尝试构造 std::function 并传递它...? std::functionstd::bind()
需要明确地被告知将参数从它的助手被调用到原始函数时传递。根据函数中参数的数量,可能需要更多或更少的占位符。
要解决这个问题,调用需要从
webSocket.onEvent(std::bind(&WebServer::webSocketEvent, this));
到
webSocket.onEvent(std::bind(&WebServer::webSocketEvent, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
【讨论】:
以上是关于在类中引用函数时出现“调用没有匹配函数”的主要内容,如果未能解决你的问题,请参考以下文章
用另一个函数(都在类中)调用函数时出现问题。没有错误代码 C++