自从尝试在我的系统(win7、vs2010、boost 1.49)上编译 boost::asio 程序几个小时以来,我一直在苦苦挣扎。Boost 已正确构建并链接到我的 vs 项目。我用 boost::regex 进行了测试,一切正常。
编译器抱怨 2 个头文件(in6addr.h、ws2ipdef.h),大约 90% 是 C2146(语法)和 C2079(未定义的类/结构/联合名称)错误。
大量这些错误与未定义的 windows 类型定义 (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和windows定义有关,我尝试使用适当的定义(WIN32_LEAN_AND_MEAN ..)以所有可能的方式包含它们,但无济于事。
我尝试在独立程序中运行winsock2,一切正常。
我的问题似乎与这个非常相似(尝试了所有未解决的建议/问题):
我已经打破了 2 个键盘,并认真考虑用鼠标剩下的东西吊死自己。请帮忙!
在此先感谢您的时间。
托马斯
错误示例:
ws2ipdef.h
Erreur 171 错误 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 错误 C2059: erreur de syntaxe : ')' c:\program files (x86)\microsoft sdks\ windows\v7.0a\include\ws2ipdef.h 372 1 asioProto Erreur 198 错误 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' 利用 une struct de 'sockaddr' non définic:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 75 1 asioProto Erreur 19错误 C2079: 'sockaddr_gen::AddressIn' 使用 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 sdks\windows\v7.0a\include\ws2ipdef.h 354 1 asioProto Erreur 186 error C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\ windows\v7.0a\include\ws2ipdef.h 372 1 asioProtoh 354 1 asioProto Erreur 186 错误 C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProtoh 354 1 asioProto Erreur 186 错误 C2086: 'int BOOLEAN' : redéfinition c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProto
in6addr.h
Erreur 7 错误 C2143:语法错误:缺席 de ';' avant '*' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 27 1 asioProto Erreur 1 错误 C2146: 语法错误:缺席 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 : 缺席 de ';' avant l'identificateur 'Word' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 25 1 asioProto Erreur 2 错误 C4430: spécificateur de type manquant - int est pris en compte par défaut . 备注: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 错误 C4430: spécificateur de type manquant - int est pris en compte par défaut。备注: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 défaut。备注:C++ ne prend pas en charge int par défaut c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 25 1 asioProto