我最近尝试编写一个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。
答案 0 :(得分:1)
我也遇到过这个问题。我发现在Visual Studio中向C ++编译器选项添加“/ P”选项并重新编译失败的文件,s_addr
确实得到#defined。
违规标题是Windows SDK inaddr.h
的一部分,它包含在winsock.h
的标题链中。
标题中的违规行是:
#define s_addr S_un.S_addr
有关此标头的详细信息,请访问MSDN here。
我找到的修复程序是在BOOST ASIO标头的#include之前的#undef s_addr
。