Неразрешенные элементы

Пишу код на плюсах. Задача: сделать шаблон класса для рациональных чисел. Выдает ошибки:

1)LNK2019 ссылка на неразрешенный внешний символ "public: __cdecl Rational::Rational(int,int)" (??0?$Rational@H@@QEAA@HH@Z) в функции main.

2)NK2019 ссылка на неразрешенный внешний символ "public: virtual __cdecl Rational::~Rational(void)" (??1?$Rational@H@@UEAA@XZ) в функции main.

3)LNK2019 ссылка на неразрешенный внешний символ "public: class Rational __cdecl Rational::Plus(class Rational const &)" (?Plus@?$Rational@H@@QEAA?AV1@AEBV1@@Z) в функции main.

Что это за символы такие и как решить проблему?

//H. 
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>


template <typename T>
class Rational
{
public:
    Rational();
    Rational(T p, T q);
    virtual ~Rational();
    int GCD(T test_p, T test_q);
    Rational Plus(const Rational& arg);
    void Show(T test_p, T test_q);

private:
    T p, q;
};

#endif 


//CPP.
#include "Rational.h"
#include <iostream>
using namespace std;

template <typename T>
Rational<T>::Rational()
{
    p = 0;
    q = 1;

    return Show(p, q);
}


template <typename T>
Rational<T>::Rational(T p, T q)
{
    this->p = p;
    this->q = q;
    
    
    return Show(p, q);
}


template <typename T>
Rational<T>::~Rational()
{

}


template <typename T>
int Rational<T>::GCD(T test_p, T test_q)
{
    while (test_p != 0 and test_q != 0)
    {
        if (test_p > test_q)
        {
            test_p = test_p % test_q;
        }
        else
        {
            test_q = test_q % test_p;
        }
    }

    return (test_p + test_q);
}


template <typename T>
Rational<T> Rational<T>::Plus(const Rational& arg)
{
    cout << "Операция сложения:\n" << p << "/" << q << " + " << arg.p << "/" << arg.q;
    T p1, p2, num, denom;

    p1 = p * arg.q;
    p2 = arg.p * q;
    num = p1 + p2;
    denom = arg.q * q;
    int gcd = GCD(num, denom);

    return Show(num / gcd, denom / gcd);

}

template <typename T>
void Rational<T>::Show(T test_p, T test_q)
{
    cout << " = " << test_p << "/" << test_q << endl;
}

//MAIN

#include <iostream>
#include "Rational.h"
using namespace std;



int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Число а";
    Rational<int> a(3,1);
    cout << "Число b";
    Rational<int> b(2,10);
    
    a.Plus(b);
 

    system("pause");


    return 0;


}

Ответы (0 шт):