Реализация и вызов статического метода в классе шаблона - PullRequest
1 голос
/ 07 июня 2011

Мой код указан ниже:

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 * ​​1016 * ошибка C2955: «Интерполятор»: использование шаблона класса требует списка аргументов шаблона

C: ... \ Interpolator.h;Строка # 25
ошибка C2244: «Интерполятор :: InterpolateVector»: невозможно сопоставить определение функции с существующим объявлением

Может кто-нибудь сказать, что я здесь не так делаю?1024 * (IDE: Visual Studio 2010 Ultimate)

Ответы [ 2 ]

6 голосов
/ 07 июня 2011

Как написано в сообщении об ошибке: '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
1 голос
/ 07 июня 2011
#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...