使用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;
答案 0 :(得分:0)
好吧,在我的一个文件中,我添加了一个带有错误原型的监听器(std::plus
)......
_listener.addSocket(serverSocket,
std::bind(&Lounge::acceptClient, this, _1),
std::bind(std::plus<int>(), 0, 0);