我目前正在尝试使用更新的工具在C ++中创建一个旧项目:该项目已在Windows XP
上使用VC71
进行开发,我现在正尝试使其在{{1}上运行与Windows 7
。
我没有遇到任何“大问题”,但是我有一个最后的编译问题导致我找到了一些代码 - 对我来说相当模糊 - 。
以下是我遇到问题的宏(简化)示例:
VC100
错误是:
#define IMPORT_STD_PAIR( _keyClass_ ,_objectClass_) \
extern template struct std::pair< _keyClass_,_objectClass_ >; \
...
我真的没有得到它应该做的(第二行),为模板化的类指定默认参数?
感谢您的帮助。
编辑: @Mark B:谢谢你的回答。你让我意识到发生了什么:没什么。
事实上,这是我的错,因为我对Windows上的开发并不熟悉。代码最初是:
C2955: 'std::allocator' : use of class template requires template argument list.
我忽略了_import_directive_因为它在每种情况下几乎都是“空的”而只是一个。因此,当它为空时,它只是创建一个没有名称的实例,这个实例并不真正相关;但是当这个宏取值#define IMPORT_STD_MAP( _import_directive_, _keyClass_ ,_objectClass_) \
extern template struct _import_directive_ std::pair<_keyClass_,_objectClass_>;
时,它更有意义:)
感谢您帮助我实现这一点,我认为这更具异国情调,并感谢您提供有用的调试建议。
答案 0 :(得分:1)
看起来ListRemake
是一个模板化的类,你试图将实例实例化为
ListRemake myList;
您需要指定ListRemake
ListRemake<int, long> myList;
答案 1 :(得分:0)
看起来它正在尝试实例化std::pair
的特定实例化。如果没有更多的上下文,我无法理解为什么会尝试这种情况,但您可能会尝试将宏定义为空,并查看代码是否编译,链接以及似乎是否有效。他们可能在10.0中更改了模板编译。