_Dist_type не объявлен в этой области - PullRequest
0 голосов
/ 20 октября 2011

Мне было поручено заставить работать старый код.Он датирован 2006 годом, и я думаю, что он был написан в визуальной студии.Я получаю эту ошибку при компиляции с g ++ 4.5.2 с использованием ming32 на машине с Windows, и я получаю ту же ошибку при компиляции с g ++ 4.1.2 на машине с unix (не знаю, какой вариант)

"_ 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 голосов
/ 20 октября 2011

_Dist_type - это внутренняя деталь реализации, используемая стандартной библиотекой Visual Studio.Имена, начинающиеся со знака подчеркивания, за которым следует заглавная буква, зарезервированы реализацией и должны никогда вызываться непосредственно из кода пользователя.

Вам необходимо выяснить, что делает эта функция, и продублироватьфункциональность в портативном виде.Если вам повезет, вы можете обнаружить, что в стандартной библиотеке уже есть функция, которая уже реализует эту функцию, и вы можете просто заменить вызов.

РЕДАКТИРОВАТЬ: В Visual Studio 2005 и 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

...