使用 boost::asio/windows7/visual studio 2010 的编译器错误

Compiler errors using boost::asio/windows7/visual studio 2010

本文关键字:2010 编译器 错误 studio windows7 boost asio 使用 visual      更新时间:2023-10-16

我一直在努力,因为我试图在我的系统上编译一个boost::asio程序(win7,vs2010,boost 1.49)。Boost 已正确构建并链接到我的 vs 项目。我用 boost::regex 进行了测试运行,一切正常。

编译器抱怨有 2 个标头(in6addr.h、ws2ipdef.h),大约 90% 是 C2146(语法)和 C2079(未定义的类/struc/联合名称)错误。

这些错误中的大量与未定义的窗口类型定义(USHORT,ULONG...)和winsock定义(SOCKET_ADDRESS,ADDRESS_FAMILY)有关。可以在本文末尾找到一个示例。

我的包括以下内容:

#pragma once
#include "targetver.h"
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/cstdint.hpp>
#include <boost/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <stdio.h>
#include <tchar.h>
#include <string>
#include <cassert>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <map>
#include <sstream>
  • 我逐个文件都尝试了包含定义并收集了这些定义在预编译标头中。

  • 鉴于我的问题似乎与 winsock2 和窗口有关定义,我试图以所有可能的方式包含它们适当定义 (WIN32_LEAN_AND_MEAN..) 声明命令无济于事。

  • 我尝试在独立程序中运行winsock2,一切运行正常。

我的问题似乎与此非常相似(尝试了所有建议/问题未解决):

http://www.developpez.net/forums/d585193/c-cpp/cpp/bibliotheques/boost/asio-erreur-syntaxe-specificateur-type-manquant-d/

我已经打破了 2 个键盘,并认真考虑用鼠标剩下的东西上吊。请帮忙!

提前感谢您的时间。

托马斯

错误示例:

ws2ipdef.h

Erreur 171 error C2059: erreur de syntaxe : ')' c:\program files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 336 1 asioProto Erreur 180 error C2059: erreur de syntaxe : ')' c:\program files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 354 1 asioProto Erreur 189 error C2059: erreur de syntaxe : ')' c:\program files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 372 1 asioProto Erreur 198 error C2059: erreur de syntaxe : ')' c:\program files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 390 1 asioProto Erreur 18 错误 C2079: 'sockaddr_gen::Address' utilise une struct de 'Sockaddr' non défini C:\Program Files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 75 1 asioProto Erreur 19 error C2079: 'sockaddr_gen::AddressIn' utilise une struct de 'sockaddr_in' non défini c:\program files (x86)\Microsoft SDKS\Windows\v7.0a\include\ws2ipdef.h 76 1 asioProto Erreur 177 error C2086: 'int Boolean' : redéfinition c:\program files (x86)\Microsoft SDK\Windows\v7.0a\include\ws2ipdef.h 354 1 asioProto Erreur 186 error C2086: 'int Boolean' : redéfinition c:\program files (x86)\Microsoft SDK\Windows\v7.0a\include\ws2ipdef.h 372 1 asioProto

in6addr.h

Erreur 7 error C2143: erreur de syntaxe : absence de ';' avant '*' c:\Program Files (x86)\Microsoft SDKS\Windows\v7.0a\include\in6addr.h 27 1 asioProto Erreur 1 error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'Byte' c:\program files (x86)\microsoft SDKS\Windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 4 error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'Word' c:\program files (x86)\microsoft SDKS\Windows\v7.0a\include\in6addr.h 25 1 asioProto Erreur 2 error C4430: spécificateur de type manquant - int est pris en compte par 德福特。Remarque : C++ ne prend pas en charge int par Défaut C:\Program Files (x86)\Microsoft SDKS\Windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 3 error C4430: spécificateur de type manquant - int est pris en compte par 德福特。Remarque : C++ ne prend pas en charge int par Défaut C:\Program Files (x86)\Microsoft SDKS\Windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 5 error C4430: spécificateur de type manquant - int est pris en compte par 德福特。Remarque : C++ ne prend pas en charge int par Défaut C:\Program Files (x86)\Microsoft SDK\Windows\v7.0a\include\in6addr.h 25 1 asioProto

终于成功了。有点。

用于编译的 VS 工具集(VS2010 上默认为 v100)存在问题。切换后执行 v90 或 SDK 7.1,编译正常。

不知道为什么。

常规>平台工具集>项目属性

C++原生多目标