2016-10-14 7 views
2

にあいまいな呼び出し私は、関数が、私はルックスを呼び出すようにしようと、私は、Visual Studio 2013エコー例コンパイルエラー:オーバーロードされた関数

を使用して簡単な例を実行しようとするどのような方法 uWebSocketsと呼ばれるいくつかのオープンソースのlibにこれらの機能を持っていますこのように:

template <bool isServer> 
void Group<isServer>::onMessage(std::function<void (WebSocket<isServer>, char *, size_t, OpCode)> handler) { 
    messageHandler = handler; 
} 

と例は次のようになります。

int main() 
{ 
    uWS::Hub h; 


    h.onMessage([](uWS::WebSocket<uWS::SERVER> ws, char *message, size_t length, uWS::OpCode opCode) { 
     ws.send(message, length, opCode); 
    }); 

    h.listen(3000); 
    h.run(); 
} 

エラーを私はこのようなルックスを取得しています:

1>D:\dev\cpp\server\uWebSockets\git\uWebSockets\uWebSockets\examples\echo.cpp(9): error C2668: 'uWS::Group<false>::onMessage' : ambiguous call to overloaded function 
1>   d:\dev\cpp\server\uwebsockets\git\uwebsockets\uwebsockets\src\Group.h(69): could be 'void uWS::Group<false>::onMessage(std::function<void (uWS::WebSocket<false>,char *,size_t,uWS::OpCode)>)' 
1>   d:\dev\cpp\server\uwebsockets\git\uwebsockets\uwebsockets\src\Group.h(69): or  'void uWS::Group<true>::onMessage(std::function<void (uWS::WebSocket<true>,char *,size_t,uWS::OpCode)>)' 
1>   while trying to match the argument list '(main::<lambda_f789fc974d6d87c4a2444e6ded66c2a0>)' 

質問:
私はオーバー2015へのVisual Studioをアップグレードせずにエラーを来ることができますか?
またはコンパイラのバージョンに関係していませんか?

UPDATE: 私はそれを設定した場合:取得h.onMessage<true>またはh.onMessage<uWS::SERVER>
イム: このエラー:

1>D:\dev\cpp\server\uWebSockets\git\uWebSockets\uWebSockets\examples\echo.cpp(10): error C2678: binary '>' : no operator found which takes a left-hand operand of type 'bool' (or there is no acceptable conversion) 
1>   could be 'built-in C++ operator>(void (__cdecl *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode), void (__cdecl *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode))' 
1>   or  'built-in C++ operator>(void (__stdcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode), void (__stdcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode))' 
1>   or  'built-in C++ operator>(void (__fastcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode), void (__fastcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode))' 
1>   or  'built-in C++ operator>(void (__vectorcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode), void (__vectorcall *)(uWS::WebSocket<true>,char *,size_t,uWS::OpCode))' 
1>   while trying to match the argument list '(bool, main::<lambda_f789fc974d6d87c4a2444e6ded66c2a0>)' 
+0

'h.onMessage (...);'を試してください。なぜ 'WebSocket 'が 'WebSocket 'と同じですか? – ilotXXI

+1

「ハブ」の種類は何ですか?おそらく 'Group 'と 'Group 'の両方を継承していますか? – molbdnilo

+0

@ ilotXXI h.onMessage が動作しないエラーが多かった 質問を更新しました – user63898

答えて

0

私は同じエラーを得た、マイナーな修正の後、私はそれが動作してしまった:

int main() 
{ uWS::Hub h; 

    h.onMessage([](uWS::WebSocket<uWS::SERVER>* ws, char *message, size_t length, uWS::OpCode opCode) { 
     ws->send(message, length, opCode); 
    }); 

    h.listen(3000); 
    h.run(); 
} 
関連する問題