2

使用 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;
4

1 回答 1

0

好吧,原来在我的一个文件中,我添加了一个带有错误原型(std::plus)的侦听器......

_listener.addSocket(serverSocket,
                    std::bind(&Lounge::acceptClient, this, _1),
                    std::bind(std::plus<int>(), 0, 0);
于 2013-01-24T19:37:23.320 回答