外部参照换行错误:'void'函数返回值

xrefwrap error: 'void' function returning a value

本文关键字:函数 返回值 void 换行 错误 外部      更新时间:2023-10-16

我在用Visual Studio 2012编译我的项目时遇到了这个奇怪的错误:

error C2562: 'std::_Callable_obj<_Ty>::_ApplyX' : 'void' function returning a value C:Program Files (x86)Microsoft Visual Studio 11.0VCincludexrefwrap

跳入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 中返回一个值。

这是我在调用addSocket时使用的两个std::function原型:

typedef std::function<bool (std::shared_ptr<sockets::ITcpSocket>&)> readCallback;
typedef std::function<void ()> disconnectCallback;

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

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