2011-10-19 118 views
0

我一直負責獲取一些舊代碼的工作。它的日期從2006年開始,我相信它是用visual studio編寫的。我用g ++ 4.5.2在windows機器上使用ming32編譯時遇到這個錯誤,並且在unix機器上得到與g ++ 4.1.2編譯相同的錯誤(不知道是什麼味道)_Dist_type未在此範圍內聲明

「_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

這當然很難想象,它沒有考慮到它拋棄了4個參數中的3個,所以任何有用的... – ildjarn

+0

我將這個例子剔除到產生錯誤所需的最小值。 – Spencer

回答

0

_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); 
} 

所以它只是返回的類型0std::iterator_traits<RandomIterator>::difference_type

+1

解決問題後,您應該去找到實現該功能的人並踢他的屁股;然後向他解釋使用定義的接口的重要性。 – Praetorian

+0

哈哈是的..希望我能。謝謝,我認爲這會讓我得到一個很快的解決方案:D – Spencer