2011-10-04 172 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