1

我最近尝试编写一个 c++ 程序,在其中我使用了可以在 Boost 库中找到的内置套接字工具。首先,我尝试制作一个基于客户端/服务器的程序,其中服务器只发送一条消息,客户端接收它。它工作得很好。

然后我编写了另一个程序,我使用 Xbox 360 kinect 来控制我的运动。创建第一个程序的想法是获取用于创建套接字的代码,这样我就可以使用我的 kinect 连接到我的三星电视来控制电视。

当我使用 kinect 将我的代码从第一个程序复制到我的第二个程序中时,问题就出现了。突然间,程序在编译 boost 库时给出了 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。

有问题的标头是 Windows SDK 的一部分inaddr.h,它包含在winsock.h.

标题中的违规行是: #define s_addr S_un.S_addr

有关此标头的更多信息位于 MSDN此处

我发现的修复是#undef s_addr在 BOOST ASIO 标头的#include 之前。

于 2014-02-13T10:15:00.180 回答