fatal error C1189: #error: WinSock.h has already been included 的解决方案

fatal error C1189: #error: WinSock.h has already been included 的解决方案 目录1.错误原因2.解决方案1.错误原因boost::asio内部会引入WinSock2.h而项目中先包含了Windows.h或其他头文件间接包含了旧版WinSock.h导致WinSock.h与WinSock2.h两套套接字 API 头文件重复 / 冲突包含编译器直接报错。2.解决方案1.全局添加预处理器宏最快修复CMake/Qt 通用在你的 CMakeLists.txt 中给目标添加定义阻止Windows.h自动引入旧版WinSock.htarget_compile_definitions(ReviewControlPlugin PRIVATE _WINSOCKAPI_ # 阻止 Windows.h 自动包含 winsock.h WIN32_LEAN_AND_MEAN # 精简 Windows.h 包含内容减少冲突概率 )如果是 VS 项目直接在「项目属性 → C/C → 预处理器 → 预处理器定义」中添加_WINSOCKAPI_;。2.调整头文件包含顺序在所有.cpp/ 预编译头中保证 boost/asio 相关头文件在 Windows.h 之前被包含// 正确顺序先包含 asio内部引入 WinSock2.h #include boost/asio.hpp // 再包含 Windows 头文件 #include windows.h3.排查并替换旧头文件检查项目代码中是否有直接#include winsock.h全部替换为#include winsock2.h两套头文件不能共存。