1

最近、Boost ライブラリにある組み込みソケット ツールを使用して C++ プログラムを作成しようとしました。最初に、サーバーがメッセージを送信し、クライアントがそれを受信するクライアント/サーバー ベースのプログラムを作成しようとしました。それはうまくいきました。

次に、Xbox 360 kinect を使用して自分の動きを制御する別のプログラムを作成しました。最初のプログラムを作成するというアイデアは、ソケットを作成するためのコードを取得することでした。つまり、Samsung テレビに接続して、kinect を使用してテレビを制御できます。

kinect を使用して、最初のプログラムから 2 番目のプログラムにコードをコピーすると、問題が発生します。ブーストライブラリをコンパイルすると、プログラムは突然100以上のエラーを出します。

含まれているライブラリとすべてをトリプルチェックしましたが、それでも問題は発生します。エラーの一部を以下に掲載します。

 1>C:\boost_1_55_0b1\boost/asio/detail/socket_types.hpp(96): error C2143: syntax error : missing ';' before '.'
 1>C:\boost_1_55_0b1\boost/asio/detail/socket_types.hpp(96): error C2238: unexpected  token(s) preceding ';'
 1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2224): error C2653: 'Windows' : is not a class or namespace name
 1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2224): error C2871: 'Collections' : a namespace with this name does not exist
 1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2225): error C2653: 'Windows' : is not a class or namespace name
 1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2225): error C2871: 'Networking' : a namespace with this name does not exist
 1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2226): error C2653: 'Windows' :  is not a class or namespace name
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2226): error C2871: 'Connectivity' : a namespace with this name does not exist
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2227): error C2065: 'IVectorView' : undeclared identifier
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2227): error C2065: 'HostName' : undeclared identifier
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2227): error C2059: syntax error : '>'
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2227): error C2653: 'NetworkInformation' : is not a class or namespace name
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2228): error C2065: 'hostnames' : undeclared identifier
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2228): error C2227: left of '->Size' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>C:\boost_1_55_0b1\boost/asio/detail/impl/socket_ops.ipp(2230): error C2065: 'HostName' : undeclared identifier

そして、他にもたくさん。私は、ライブラリが機能していることを知っています。最初のプログラムでは機能していたので、何が問題を引き起こしているのかわかりません。

その他のインクルードは、C++ 用 Kinect ライブラリの SDL および SDK です。

4

1 に答える 1

1

私もこれに出くわしました。Visual Studio の C++ コンパイラ オプションに「/P」オプションを追加し、失敗したファイルを再コンパイルしたところ、s_addr実際に #defined になっていたことがわかりました。

inaddr.h問題のあるヘッダーは、のヘッダー チェーンに含まれている Windows SDK の一部でしたwinsock.h

ヘッダーの問題のある行は次のとおりです。 #define s_addr S_un.S_addr

このヘッダーの詳細については、MSDN のこちらを参照してください。

私が見つけた修正#undef s_addrは、BOOST ASIO ヘッダーの #include の直前でした。

于 2014-02-13T10:15:00.180 に答える