_Dist_type未在此范围内声明

时间:2011-10-19 20:49:23

标签: c++ stl scope g++

我的任务是让一些旧代码正常工作。它的日期是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库的一个非常旧版本的一部分,它既没有构建机器也有。我该怎么解决这个问题?我甚至不确定这个功能是做什么的。

非常感谢任何帮助。

1 个答案:

答案 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