使用 Visual Studio 2012 编译我的项目时,我遇到了这个奇怪的错误:
error C2562: 'std::_Callable_obj<_Ty>::_ApplyX' : 'void' function returning a value C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap
跳转时xrefwrap
,错误来自这一行:
_VARIADIC_EXPAND_0X(_APPLYX_CALLOBJ, , , , )
我的代码在 Linux 上使用 GCC 编译得很好。另外,编译器没有给我任何关于导致此错误的信息。
此错误的原因可能是什么?我怀疑这段代码可能是源代码,但这只是因为我std::ref
在那里使用:
_listener.addSocket(clientSock, std::bind(&Client::handleReceive, &client,
_1, std::ref(*this)),
std::bind(&Lounge::handleClientDisconnect, this,
std::cref(client)));
这是我绑定的成员函数的两个签名:
bool Client::handleReceive(std::shared_ptr<TBSystem::network::sockets::ITcpSocket>& socket,
Lounge& lounge);
void Lounge::handleClientDisconnect(const Client& c);
我确实返回了一个值Client::handleReceive
。
这是std::function
我在调用时使用的两个原型addSocket
:
typedef std::function<bool (std::shared_ptr<sockets::ITcpSocket>&)> readCallback;
typedef std::function<void ()> disconnectCallback;