2011-05-23 81 views
0

一些歷史: 我原想用升壓的ASIO,但後來發現,ASIO不會與VC++ 6.0(這是一個要求)工作。在整合提升的同時,我發現使用了Multi_Index_Container和Signals。在發現ASIO不兼容後,我將升級版本降級到版本1.34.1,以便它支持VC6。現在我正試圖解決所有其他編譯錯誤。錯誤C2039在VC6

起初,我有這個代碼和錯誤: 我試圖使用從構建1.34.1升壓Multi_Index成立 集合結構的。這種多指數容器將有2個獨特的鍵 (ID和姓名),因爲我必須能夠與任何主要的搜索。我 做了VC++ 6.0 SP5的編譯器特定的更正:

boost::multi_index::multi_index_container 
member_offset<A,int,offsetof(A,x)> 

我的完整聲明:

enum RESPONSE_CODES 
{ 
    Pass = 200, 
    Fail = 201, 
    Hex = 202, 
    Decimal = 203, 
    String = 204, 
    Help = 205, 
    None = 255 
} 

struct PDCUTestMessage 
{ 
    string name; 
    char id; 
    RESPONSE_CODES responseType; 
    int numberOfParameters; 
    string errorString; 
    vector<char> response; 
    string param1Name; 
    string param2Name; 
    string param3Name; 
    string param4Name; 
    string param5Name; 
    boost::function2<bool, vector<char>, PDCUTestMessage &> process; 

    // constructors not listed 
}; 

struct ID(); 
struct Name(); 

typedef boost::multi_index::multi_index_container< 
    PDCUTestMessage, 
    boost::multi_index::ordered_unique< 
     boost::multi_index::tag<ID>, 
     boost::multi_index::member_offset<PDCUTestMessage, char, offsetof(PDCUTestMessage, id)> >, 
    boost::multi_index::ordered_unique< 
     boost::multi_index::tag<Name>, 
     boost::multi_index::member_offset<PDCUTestMessage, string, offsetof(PDCUTestMessage, name)> > 
    > 
> PDCUMessageList; 

後來,我嘗試建立indicies爲兩個關鍵字,根據 VC++ 6.0編譯器相關的語法來繞過獲取/標籤問題:使用上面的代碼

typedef index<PDCUMessageList, ID>::type IDIndex; 
typedef index<PDCUMessageList, Name>::type NameIndex; 

,我得到了以下錯誤:

錯誤C2039:「類型」:不是「全局命名空間」引用上述兩個的typedef線的成員。

這個問題我固定澄清的命名空間:

typedef boost::multi_index::index<PDCUMessageList, ID>::type IDIndex; 
typedef boost::multi_index::index<PDCUMessageList, Name>::type NameIndex; 

現在我已經得到了在提升的一個類另一個錯誤發生的歷史: lambda_traits.hpp。我沒有明確使用lambda_traits,所以它必須是 multi_index正在使用它。這裏的錯誤和地點:

C2039:「access_traits」:是不是「元組」

線106 lambda_traits成員:

104 template<int N, class T> struct tuple_element_as_reference { 
105 typedef typename 
106  boost::tuples::access_traits< 
107  typename boost::tuples::element<N, T>::type 
108  >::non_const_type type; 
109 }; 

任何人有任何想法如何突破這個最新錯誤?

+1

您需要升級編譯器 - 它甚至不符合C++ 98標準。 – Puppy 2011-05-23 17:34:46

+0

你怎麼知道?我在設計環境中指向的VC++目錄是VC98和msdev98。據我所知,我符合C++ 98。我如何驗證? – user731305 2011-05-23 18:19:52

+0

VC++ 6.0一個月就出來了C++ 98標準定稿後,它是使用許多預標準結構和語法相當臭名昭著。 VC++的第一個版本具有任何體面的標準支持,VC++ 8.0(儘管7.1至少解決了一些模板問題)。誰強迫你使用VC++ 6.0是一個虐待狂。 ; - ] – ildjarn 2011-05-24 01:06:50

回答

0

我記得,模板解析是在VC6只是尷尬。 嘗試儘可能簡化依賴類型。例如:

template<int N, class T> struct tuple_element_as_reference { 
    typedef typename boost::tuples::element<N, T> 
    tuples_element_t; 

    typedef typename tuples_element_t::type 
    tuples_element_type_t; 

    typedef typename boost::tuples::access_traits< 
    tuples_element_type_t 
    > 
    tuples_access_traits_t; 

    typedef typename tuples_access_traits_t::non_const_type 
    type; 
}; 
+0

雖然我假設原因在我的代碼中。錯誤不可能源自boost類,因爲版本1.34.1已成功編譯並測試了VC6,對吧?我可能不應該改變實際的助推類... – user731305 2011-05-23 16:51:18

+0

可能。你確定你的ID和名字定義是正確的嗎? – Krit 2011-05-23 16:59:10

+0

我編輯了我的原始文章,以包含struct PDCUTestMessage的代碼和一個結構成員的枚舉。我很確定我的定義是正確的,但是最好將它們發佈。 – user731305 2011-05-23 17:17:53

相關問題