我正在将一些C ++代码从VisualStudio 6升级到VisualStudio 2008。
有一个类“GenExportableTree”,看起来很像Dinkumware的{xtree http://www.dinkumware.com/xtree.txt
编译包含此GenExportableTree的库时,出现以下错误:
Error 37 error C2664: 'std::allocator<_Ty>::deallocate' : cannot convert
parameter 1 from 'std::CGenExportableTree<_K,_Ty,_Kfn,_Pr,_A>::_Node *' to
'CCfwSchemaInfo *'
以下几行:
void _Freenode(_Nodeptr _S)
{
allocator.deallocate( _S, 1);
}
一些额外信息: 您可以在上面的dinkumware链接下找到GenExportableTree的完整实现。
如果CCfwSchemaInfo即将到来,我可以找到以下声明:
typedef CGenExportableMap<wstring, CCfwSchemaInfo, GenNoCaseWString> CfwSchemaTable;
CGenExportableMap的定义如下:
template<class _K, class _Ty, class _Pr = less<_K>,
class _A = allocator<_Ty> >
class CGenExportableMap {
public:
typedef CGenExportableMap<_K, _Ty, _Pr, _A> _Myt;
typedef pair<const _K, _Ty> value_type;
....
....
typedef _K key_type;
typedef _Ty referent_type;
typedef _Pr key_compare;
typedef _A allocator_type;
typedef typename _A::reference _Tref;
typedef CGenExportableTree<_K, value_type, _Kfn, _Pr, _A> _Imp;
在最后一行中,GenExportableTree在GenExportableMap定义中使用。
由于之前所有这些都在vs6下正确编译,我猜其实一切都是正确的 - 可能编译器现在更严格 - 所以我应该从哪里开始寻找编译器抱怨的错误?我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
VC6存在严重模板问题,因此无法根据标准支持分配器。他们使用了一些早已被删除的特殊黑客。
如果某些代码仍依赖于那些非标准接口,我认为您唯一的选择是修复代码,使其适用于当前(标准)分配器接口。遗憾。