我正在将一些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存在严重的模板问题,因此它无法根据该标准支持分配器。他们使用了一些很早就被删除的特殊技巧。
如果某些代码仍然依赖于那些非标准接口,我认为您唯一的选择是修复代码,使其与当前(标准)分配器接口一起使用。抱歉。