在模板类中实现和调用静态方法

Implementing and calling a static method in a template class

本文关键字:调用 静态方法 实现      更新时间:2023-10-16

我的代码如下:

插值.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: 。。。\插值器.h;第22行
错误C2955:"插值器":使用类template需要template参数列出

C: 。。。\插值器.h;第25行
错误C2244:'插值器::插值矢量':无法将函数定义与匹配现有的申报

有人能告诉我我在这里做错了什么吗?

(IDE:Visual Studio 2010 Ultimate)

如错误消息中所写:'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
#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