2012-04-11 145 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