xrefwrap错误:'void'函数返回一个值

时间:2013-01-23 02:26:54

标签: c++ windows c++11 visual-studio-2012 bind

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

1 个答案:

答案 0 :(得分:0)

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

_listener.addSocket(serverSocket,
                    std::bind(&Lounge::acceptClient, this, _1),
                    std::bind(std::plus<int>(), 0, 0);