WinSock.h已经包含了Boost Windows Qt

error WinSock.h has already been included Boost Windows Qt

本文关键字:Boost Windows Qt 包含 WinSock      更新时间:2023-10-16

我是在Qt creator上使用boost lib开发一个应用程序,我的平台是Windows8 MSVC2013 64。

我有两个类在每个我使用boost头,

现在我需要使用这个类,当我从另一个源文件中包含这些类头文件时,我得到错误

error WinSock.h has already been included

在我的第一个类中,我添加了像

这样的boost头
#define WIN32_LEAN_AND_MEAN
#include <boost/asio.hpp>
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/read_until.hpp>
#include <boost/bind.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/asio/write.hpp>
#include <boost/asio/read.hpp>
#include <boost/asio/placeholders.hpp>
#include <boost/foreach.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/interprocess/ipc/message_queue.hpp>
#include <boost/interprocess/sync/interprocess_semaphore.hpp>
#include <boost/bind.hpp>
#include <boost/cstdint.hpp>
#include <boost/circular_buffer.hpp>
#include <boost/format.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>

在第二类中,我以同样的方式使用了标题

#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/interprocess/sync/interprocess_semaphore.hpp>
#include <boost/interprocess/ipc/message_queue.hpp>
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/read_until.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/asio/write.hpp>
#include <boost/asio/read.hpp>
#include <boost/bind.hpp>
#include <iostream>
#include <boost/asio/placeholders.hpp>
#include <fstream>
#include <boost/cstdint.hpp>
#include <boost/circular_buffer.hpp>
#include <boost/format.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>

我已经在这里找到了答案Boost::asio winsock和winsock 2的兼容性问题,但我仍然有问题。

编辑:

我的第二个类内部使用第一个类头,这是像多次包括boost头的原因吗?

我已经用

包围了boost头include
#ifndef class_obj__1
#define class_obj__1
//boost headers
//boost headers  
#endif

任何帮助都将不胜感激。

谢谢哈里斯

#define WIN32_LEAN_AND_MEAN移动到g++命令行参数列表为-DWIN32_LEAN_AND_MEAN。这对我有帮助。
还有一件事帮助了我,那就是重新排序#include指令,把boost包含在所有其他指令之前。