std :: allocator< _Ty> :: deallocate:无法将参数1从'X'转换为'Y'

时间:2011-06-22 15:24:31

标签: c++

我正在将一些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下正确编译,我猜其实一切都是正确的 - 可能编译器现在更严格 - 所以我应该从哪里开始寻找编译器抱怨的错误?我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

VC6存在严重模板问题,因此无法根据标准支持分配器。他们使用了一些早已被删除的特殊黑客。

如果某些代码仍依赖于那些非标准接口,我认为您唯一的选择是修复代码,使其适用于当前(标准)分配器接口。遗憾。