我的项目使用winsock.h的windows.h,我需要包含boost:assio,它使用winsock2。所以我得到了很多错误,上面写着Winsock.h已经包含了。我可以定义WIN32_LEAN_AND_MEAN。这样窗户就不会用winsock。问题是,我需要windows.h来使用它,而我只需要用于异步计时器的Asio。我不需要它的风向标2.h。我尝试搜索如何禁用它的winsock2使用,我发现在包含boost:asio之前,我可以通过定义BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN来做到这一点,但是仍然会出现同样的错误。
#include <windows.h>
#define BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN
#include <boost/asio.hpp>误差
files\boost\boost_1_47\boost\asio\detail\socket_types.hpp(22):
1>c:\program致命错误C1189:#error : WinSock.h已经包含了
发布于 2013-04-29 21:51:23
正如Danius ( OP)指出的那样,
#include <windows.h>
#include <boost/asio.hpp>此错误失败:
1>c:\source\<SNIP>\boost\1.51.0\boost\asio\detail\socket_types.hpp(22): fatal error C1189: #error : WinSock.h has already been included另一方面,
#include <boost/asio.hpp>
#include <windows.h>产生大量噪声并错误地设置windows版本#
1? Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
1> - add -D_WIN32_WINNT=0x0501 to the compiler command line; or
1> - add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.
1> Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).我找不到任何办法避免这件事没有留下不好的味道,但这是:
#ifdef _WIN32
# ifdef USE_ASIO
// Set the proper SDK version before including boost/Asio
# include <SDKDDKVer.h>
// Note boost/ASIO includes Windows.h.
# include <boost/asio.hpp>
# else // USE_ASIO
# include <Windows.h>
# endif // USE_ASIO
#else // _WIN32
# ifdef USE_ASIO
# include <boost/asio.hpp>
# endif // USE_ASIO
#endif //_WIN32确实会产生一个干净的编译。
应该没那么难
发布于 2012-03-17 13:44:18
尝试并更改包含的顺序。从boost/asio.hpp开始,然后将windows.h放在后面。
通常,任何代码库的编写者都能解决兼容性问题,但如果他们的代码首先满足编译器和预处理器,他们可以做得更好。
ACE也有一个类似的问题,包括在其他任何问题解决之前都包括ace/OS.h。
发布于 2014-04-25 13:36:44
对我来说,用我正在使用的另一个Microsoft (也就是用"typedef接口“声明东西)来切换include的顺序会导致编译错误。
因为我的错误来自socket_types.h,来自以下几行:
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)我在Windows.h之前添加了一个"winsock2.h“的包含,然后,我最后将boost/asio.hpp包含在其中,然后愉快地编译了所有内容。
https://stackoverflow.com/questions/9750344
复制相似问题