我的任务是让一些旧代码正常工作。它的日期是2006年,我相信它是在视觉工作室写的。在使用ming32在Windows机器上使用g ++ 4.5进行编译时出现此错误,并且在unix机器上使用g ++ 4.1.2编译时出现相同的错误(不确定是什么味道)
“_ Dist_type未在此范围内声明”
#include <algorithm>
#include <vector>
template<class ReturnType, class RandomIterator, class _Ty> inline
ReturnType interpolate(RandomIterator _F, RandomIterator _L, const _Ty& _V, RandomIterator _F2)
{
return _Dist_type(_F);
}
class Interpolator
{
public:
double interp(const std::vector<double>& xValues, const std::vector<double>& yValues,
const double x0) const
{
//1-D interpolation
return interpolate<double>(xValues.begin(), xValues.end(), x0, yValues.begin());
}
};
我已经尝试使用Google搜索_dist_Type,但似乎没有很多信息。我确实找到了一个来源,但我不确定它能帮到多少。 http://en.allexperts.com/q/C-1040/STL-Iterator.htm
我的理解是_Dist_type是STL库的一个非常旧版本的一部分,它既没有构建机器也有。我该怎么解决这个问题?我甚至不确定这个功能是做什么的。
非常感谢任何帮助。
答案 0 :(得分:0)
_Dist_type
是Visual Studio标准库使用的内部实现细节。以下划线后跟大写字母开头的名称由实现保留,并且必须从不直接从用户代码调用。
您必须弄清楚该功能的作用并以便携方式复制功能。如果你很幸运,你可能会发现标准库中有一个功能已经实现了这个功能,你只需要替换它。
修改强>
Visual Studio 2005&amp; 2010年_Dist_type
定义为
template<class _Iter> inline
typename iterator_traits<_Iter>::difference_type
*_Dist_type(_Iter)
{ // return distance type from arbitrary argument
return (0);
}
因此,只返回0
std::iterator_traits<RandomIterator>::difference_type
值