2011-06-07 80 views
1

我的代码如下:实现并调用模板类的静态方法

Interpolation.h

#ifndef INTERPOLATOR 
#define INTERPOLATOR 

#include <vector> 
#include <utility> 

template <class T> 
class Interpolator 
{ 
    public: 
     static T InterpolateVector(const std::vector<std::pair<T, T>> & Vector, T At); 

    private: 
     static T GetBasisValue(T x); 
}; 

template <class T> 
T Interpolator::InterpolateVector(const std::vector<std::pair<T, T>> & Vector, T At) // Line #22 
{ 
    // ... 
} // Line #25 

// ... 

#endif // INTERPOLATOR 

的main.cpp

#include <vector> 
#include <utility> 
#include "Interpolator.h" 

int wmain(int argc, wchar_t *argv[]) 
{ 
    std::vector<std::pair<float, float>> Measurements; 
    Measurements.push_back(std::make_pair(0, 80.8)); 
    Measurements.push_back(std::make_pair(1, 80.4)); 
    Measurements.push_back(std::make_pair(3, 80.1)); 
    Measurements.push_back(std::make_pair(4, 79.6)); 

    float y2 = Interpolator<float>::InterpolateVector(Measurements, 2.0f); 

    return 0; 
} 

当我建立此代码,我收到以下错误消息:

C:... \ Interpolator.h;线#22
错误C2955: '插值':使用类 模板需要模板参数列表

C:\ Interpolator.h;线#25
错误C2244: “插补:: InterpolateVector”: 无法函数定义匹配 现有的声明

谁能告诉我什么,我做错了什么?

(IDE:Visual Studio 2010的旗舰版)

回答

6

写在错误消息:'Interpolator' : use of class template requires template argument list

你应该写:

template <class T> 
T Interpolator<T>::InterpolateVector(const std::vector<std::pair<T, T>> & Vector, T At) // Line #22 
{ 
    // ... 
} // Line #25 
+0

它的工作。非常感谢。在代码中一切都好吗? – hkBattousai 2011-06-07 14:20:10

1
#ifndef INTERPOLATOR 
#define INTERPOLATOR 

#include <vector> 
#include <utility> 

template <class T> 
class Interpolator 
{ 
    public: 
     static T InterpolateVector(const std::vector<std::pair<T, T> > & Vector, T At); 

    private: 
     static T GetBasisValue(T x); 
}; 

template <class T> 
T Interpolator <T> ::InterpolateVector(const std::vector<std::pair<T, T> > & Vector, T At) // Line #22 
{ 
    // ... 
} // Line #25 
相关问题