1

簡単にWindows 7ラップトップでwebsocket ++サーバーを開発しようとしています(viまだうまくいきません。常にftpしたくありません)。最後にUbuntu 12.10に移行します。

Visual C++ Win32 コンソール アプリケーション プロジェクトを使用しています。

includeディレクトリを調べてwebsocketpp、boost 1.53.0をインストールしました Windows に Boost.Build をインストールするにはどうすればよいですか? 、およびincluded & linked boost Boost リンク、Visual Studio およびバージョン管理

http://www.zaphoyd.com/websocketpp/manual/building-program-websocketしようとしていますbuild print_server.cpp

私がするとき、私は得るError 1 error C2182: '*' : illegal use of type 'void' c:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp Line:155 Column:1

ブースト コードは次のとおりです (2 行目は 155)。

T & operator*() const
{
    BOOST_ASSERT( px != 0 );
    return *px;
}

このエラーが発生するのはなぜですか? どうすれば修正できますか?

4

1 に答える 1

3

これは、VCPP でブーストを使用してコンパイルする場合の既知の問題です。WebSocket++ 0.3 は intrusive_ptr を使用しませんが、static_pointer_cast を使用します。各ブースト スマート ポインターは、boost::static_pointer_cast の独自のオーバーロードを実装します。shared_ptr<void>aを aに静的にキャストする場合、VCPP は正しいオーバーロードを選択できないようshared_ptr<connection_ptr>です。Clang と GCC はどちらも正しいオーバーロードを使用しますが、VCPP は使用しません。私はこの問題を示す小さなデモ プログラムを持っています。

当面の簡単な修正方法は、スマート ポインターをブーストするのではなく、C++11 を使用するように WebSocket++ に指示することです。VCPP は std::static_pointer_cast / std::shared_ptr で正しく動作します。http://www.zaphoyd.com/websocketpp/manual/reference/cpp11-supportに従って、 WebSocket _WEBSOCKETPP_CPP11_MEMORY_++ ヘッダーを含める前に定義すると、これが実現します。VCPP2010 の C++11 の実装をテストしたところ<memory>、WebSocket++ に必要なすべてが実装されています。

于 2013-03-29T02:12:15.940 に答える