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)));

バインドしているメンバー関数の 2 つのシグネチャを次に示します。

bool  Client::handleReceive(std::shared_ptr<TBSystem::network::sockets::ITcpSocket>& socket,
                        Lounge& lounge);

void  Lounge::handleClientDisconnect(const Client& c);

で値を返しますClient::handleReceive

そして、これはstd::function私が呼び出すときに使用している2つのプロトタイプですaddSocket:

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

1 に答える 1

0

さて、私のファイルの 1 つで、間違ったプロトタイプ ( std::plus) を持つリスナーを追加したことがわかりました...

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