簡體   English   中英

使用 boost::asio/windows7/visual studio 2010 的編譯器錯誤

[英]Compiler errors using boost::asio/windows7/visual studio 2010

幾個小時以來,我一直在努力嘗試在我的系統(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>
  • 我嘗試了逐個文件包含定義並在預編譯的 header 中收集這些定義。

  • 鑒於我的問題似乎與 winsock2 和 windows 定義有關,我嘗試使用適當的定義 (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 error C2079: 'sockaddr_gen::Address' utilize 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' utilize 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: '整數 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)\微軟 sdks\windows\v7.0a\include\ws2ipdef.h 372 1 asioProto

in6地址.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: 語法錯誤:缺少 ';' avant l'identificateur 'Byte' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\in6addr.h 24 1 asioProto Erreur 4 error C2146: 語法錯誤:缺少 ';' 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 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 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

終於成功了。 有點兒。

問題在於用於編譯的 VS 工具集(VS2010 上默認為 v100)。 切換做v90或SDK 7.1時,編譯ok。

不知道為什么。

項目屬性 > 一般 > 平台工具集

C++ 本機多目標

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM