2011-10-04 92 views
2

我目前正在嘗試使用更新的工具在C++中創建一箇舊項目:該項目已在Windows XPVC71上開發,現在我正試圖使其在Windows 7上運行,並且使用VC100默認模板參數?

我沒有得到任何「大」的問題,但是我有最後一個編譯問題,這導致我的代碼 - 對我來說很晦澀 - 。

這裏是宏(簡體),我有麻煩的一個樣本:

#define IMPORT_STD_PAIR(_keyClass_ ,_objectClass_)    \ 
extern template struct std::pair< _keyClass_,_objectClass_ >; \ 
... 

的錯誤是:

C2955: 'std::allocator' : use of class template requires template argument list. 

我真的不明白什麼是應該做的(第二行),爲模板類指定默認參數?

謝謝你的幫助。

編輯: @Mark B:謝謝你的回答。你讓我意識到發生了什麼事:沒有。

事實上,這是我的錯,因爲我在開發Windows時並不熟悉。該代碼原本是:

#define IMPORT_STD_MAP(_import_directive_, _keyClass_ ,_objectClass_) \ 
    extern template struct _import_directive_ std::pair<_keyClass_,_objectClass_>;  

我忽略_import_directive_因爲它幾乎是「空」在每一種情況下,除了一個。所以當它是空的時候,它只是創建一個沒有真正相關名稱的實例;但是當這個宏取值__declspec (dllimport)它更有意義:)

感謝幫助我意識到,我認爲這是更奇特的東西,並感謝您的調試建議,這是有用的。

+0

我認爲它可能幫助,如果你搜索一個這個#define被實際使用的地方,並將它添加到你的示例代碼 – yms

回答

0

看起來它試圖實例化std::pair的特定實例。沒有更多的上下文,我不明白爲什麼會這樣做,但是你可以試着讓宏定義爲無,然後看代碼是否編譯,鏈接,並且看起來可以工作。他們可能在10.0中更改了模板編譯。

1

它看起來像ListRemake是一個模板類,你正在試圖實例化一個實例爲

ListRemake myList; 

你需要指定模板參數爲ListRemake

ListRemake<int, long> myList; 
+0

對不起,我寫錯了:/它是std :: allocator(也包含在宏中)。根據Mark B給我的調試方法,該錯誤似乎與此宏無關。 – Rippalka