2012-04-11 144 views
0

我努力编译我的系统上的boost :: asio程序(win7,vs2010,boost 1.49)几个小时后,我挣扎着。 Boost已经正确地建立并与我的项目相关联。我用boost :: regex做了一个测试,一切正常。使用boost :: asio/windows7/visual studio 2010的编译器错误

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

大量的这些错误都与未定义的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相关和窗户 定义,我想包括他们使用 适当defineds(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错误C2059:ERREUR德syntaxe: ')' C:\程序文件 (x86)的\微软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 asioP roto 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 error C2079:'sockaddr_gen :: Address'uses une struct de 'sockaddr 'nondefini c:\ program files(x86)\ microsoft sdks \ windows \ v7.0a \ include \ ws2ipdef.h 75 1 asioProto Erreur 19 error C2079:'sockaddr_gen :: AddressIn'uses une struct de'sockaddr_in' nondefini c:\ program files(x86)\ microsoft sdks \ windows \ v7.0a \ include \ ws2ipdef。h 76 1 asioProto Erreur 177错误 C2086:'int BOOLEAN':redéfinitionc:\ program files(x86)\ microsoft sdks \ windows \ v7.0a \ include \ ws2ipdef.h 354 1 asioProto Erreur 186 error C2086:' INT BOOLEAN”:重新定义C:\程序文件(86)\微软 的SDK \ Windows \ v7.0a \包括\ ws2ipdef.h 372 1 asioProto

in6addr.h

ERREUR 7错误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écificateurde type manquant - int est pris en版权所有,不得转载。注意:C++ ne prend pas en charge int par défautc:\ program files(x86)\ microsoft sdks \ windows \ v7.0a \ include \ in6addr.h 24 1 asioProto Erreur 3错误 C4430:spécificateurde type manquant - int est pris en compte par défaut。雷马克:C++ NE出了点PAS烯电荷INT帕 défautC:\程序文件(86)\微软 的SDK \ Windows \ v7.0a \包括\ in6addr.h 24 1 asioProto ERREUR 5错误 C4430:spécificateur德型manquant - int est pris en compte par défaut。雷马克:C++ NE出了点PAS带电荷INT面值 défautC:\ Program Files文件(x86)的\微软的SDK \ WINDOWS \ v7.0a \ \包括25 in6addr.h 1 asioProto

+0

哪里是[再现](http://sscce.org/)?此外,如果您的编译器错误消息位于[英文](http://meta.stackexchange.com/a/13684/148504)中,将会有所帮助。 – 2012-04-11 16:31:27

+0

下次正式登记。谢谢。 – user1326256 2012-04-11 19:55:38

回答

0

终于成功地打钉。有点。

问题与用于编译的VS工具集有关(VS2010默认为v100)。 切换到v90或SDK 7.1时,编译好。

不知道为什么。

项目属性>一般>平台工具集

C++ Native Multi-Targeting