|
在做程序从VC6到kylix3移植的过程中,发现有类似以下代码不能通过编译:
map<int, int> mapTemp;
mapTemp.insert(make_pair(0, 0));
提示错误:
Can't find a match for 'map<int, int, less<int>, allocator<pair<const int, int> > >::insert(pair<int, int>)'
而如果 mapTemp[0] = 0;就没有问题。
经过研究发现是make_pair()的返回类型和insert的参数类型不匹配导致。make_pair()返回的是pair<int, int>类型,而insert()要求的是pair<const int, int>类型。
怎么办呢?有三个选择:
1。只使用重载的[]操作,不过这样子心里有些不爽
2。对于需要使用的数据类型,做出make_pair的特例化实现,这样子使用的数据类型一多的话就很繁琐
3。修改make_pair的缺省实现,这样子有可能有副作用,也许会对其他代码造成影响。
最后我选择了3,反正不行再改回来把。
打开kylix3安装目录下的/include/stlport/stl/_pair.h文件,跳到122行。把以下代码
template <class _T1, class _T2>
inline pair<_T1, _T2> __STL_CALL make_pair(const _T1& __x, const _T2& __y)
{
return pair<_T1, _T2>(__x, __y);
}
修改为:
template <class _T1, class _T2>
inline pair<const _T1, _T2> __STL_CALL make_pair(const _T1& __x, const _T2& __y)
{
return pair<const _T1, _T2>(__x, __y);
}
重新编译,搞定。
|
|