我正在将一些C ++代码从VisualStudio 6升级到VisualStudio 2008。

有一个类“ GenExportableTree”,看起来很像Dinkumware http://www.dinkumware.com/xtree.txt中的xtree。

编译包含此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;


在这最后一行是在GenExportableMap定义中使用GenExportableTree的位置。

由于以前所有这些都在vs6下正确编译,我想实际上一切都正确-也许现在的编译器更严格了-那么我应该在哪里开始寻找编译器抱怨的错误?我应该如何解决这个问题?

谢谢!

最佳答案

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

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

10-02 05:08